Ask HN: Is there a way I can learn programming within 4 months?
Hi everyone, I’m steph, I’m a graduate from Cairo university with a degree in business relation. I’d like to ask if it’s possible for me to learn programming from scratch. I begin taking interests in techs particularly software and web development because i believe i can really do well by applying my own business statistics knowledge to create something meaningful and positive to the entire business realm. I’ve started reading some online guides to web development and i can say I’m loving it so far and grabbing one or two things. So i was thinking if it’s really possible for me to do this within a very short period of time.
43 comments
[ 4.1 ms ] story [ 33.2 ms ] threadFirst define what you're trying to accomplish e.g. Web App, Mobile App. And then learn the prerequisites for it.
Programming is 99% defining the problem and designing a solution, and 1% tapping your keyboard. Perhaps your problem is to learn enough programming to create a proof of concept of whatever you're wanting to eventually build as a real product.
Before you set off on your journey, it would be wise to look at your competition in the same space. I'd say your greatest threat is likely to be existing business intelligence tools that allow the users to write their own complex queries that reach into various real-time and batched data sets and surface them as beautiful widgets and dashboards, which they can then share internally or externally through security policies. Some even have an element of artificial intelligence to try and find patterns and correlations that would be valuable to a business.
C is a small language and this was possible to do. More modern languages seem so bloated that this is not possible anymore I think (with the exception of Go).
So yeah ... you can learn to code reasonably well in 4 dedicated months. But be clear about your goals. If you want to learn web dev, you might want to learn Javascript but that is a larger language than say Go. Python is another great choice ... easy to get into and quite deep.
This is a long, ever-improving journey. Start whenever you are ready, and know that there really isn't a finish line.
Good luck!
Depending on your goal, in 4 months you can become a novice programmer who could be hired by a company to grow into a junior position.*
You could spend the same amount of time to solve a problem that is meaningful to you and in doing so try to learn all the programming you need to know. It would be helpful to have a mentor of sorts, though. This approach is often taken by domain experts who have a problem, but are unable to get a solution due to bureaucracy, lack of funds, or there just is no suitable solution yet. The resulting programs might not be the best, from a programming point of view, but the value added is often very high.
* It is actually not quite clear what a junior programmer is or should be able to do. This depends on the expectations of the organization as well as their willingness to train good people. Usually organizations are looking for people who know enough to be productive fast without too much supervision, whereas novice programmers often need more one-on-one attention than organizations are willing to invest. As a result, novices are thrown in the deep end of the pool and those who can swim to the other end of the pool during their probation period are kept, the others are left to drown.
https://www.reddit.com/r/ProgrammerHumor/comments/7eyrbx/how...
Basically 4 months is too short term to learn some really useful things in programming from scratch.
web development has complexities related to legacy code and features as well as social and political factors.
The actual platform of "the web" is essentially an asynchronous remote-directory-listing-service. We were originally supposed to use this to browse linked pages. This use case is trivially easy to learn about how to program. (HTML)
We have since gone and made it complicated, as people expect to load new content and have the page alter itself to fit the new content, all without loading the entire page from the server again. (against the way the web itself worked)
Additionally, trends and the need to waste cash in the form of "busy work" has led to people preferring to code in a pretend version of Javascript (ES6) that basically lies to you about what Javascript actually is and behaves like and this has led to perversions like front-end-build toolchains etc.
Getting a job in web development may require you to pay homage to such nonsense and pretend that you love over-complicating things in manners that bring more side-effects and pain than solutions.
If ones goal is employment in the sphere of web development, can one successfully suppress ones common sense and actual practical instincts sufficiently to ride along with this lemming-horde headed for the precipice? Then WOW HEY! Front end "engineering" is for you!
If, on the other hand, political perversions of justice and decency make you sick, then you might wish to try anything else.
There are other ways to develop for the web, of course, but I'm speaking largely about the mainstream SV technologies and the mentalities behind them.
Glad to see someone taking an interest in programming. As others have said: although you can learn quite a bit in 4 months, programming is a life-long journey of learning. Happy programming!
Wake up - read about code. At work - find good excuses to do my job with code. Come home from work - code. After dinner - code. Before bed - code.
And so on. I also got lucky because I found a couple engineers at my company who were willing to mentor my early projects. What kept me going was finding projects I thought were interesting and challenging and learning everything I could to solve them.
As a lot of commenters have said, we're all learning all the time. The learning never ends! There's never a better time to start than now!
Someone who can spend 10-30 minutes per day with you, going over what you coded and giving tips and best practises saves A LOT of time.
Programming is much the same. Yes, you absolutely can learn programming in 4 months, but you'll still be learning 20 years from now (25 years and counting for me). An important distinction is that, with a few months of practice, you'll probably know how the major constructs work as well as I (or anyone else here) do, but you probably won't have the particular sort of mental agility that lets you piece those constructs together fluently — that takes longer. Being able to map from problem to solution will take longer still.
Also, going back to the "learning english" metaphor, knowing english doesn't mean you know the technical vocabulary around sailing, or around mountaineering. Each of those is a separate sub-skill that needs its own practice. Likewise, knowing elementary programming doesn't mean you have the domain knowledge you need for graphics programming, or web dev, or whatever else.
It's a constant learning experience and if you ever stop learning in this subject, i think you're doing something wrong.
Become employable as a programmer in 4 months? No. That is not enough time to learn the fundamentals, and become fluent in any programming language. When I hire I want to know what a candidate has done and can do on day 1. New university graduates have spent at least 2 years coding, and have difficulty demonstrating experience.
But the same is true for _any_ professional endeavor. Skill takes time to develop, as does a portfolio of accomplishments.
View points on methodology: 1) Read more than you write. There is excellent code out there. By reading it, you learn to think like an experienced programmer. 2) Hands on > Books. The best approach is to pick an project and program away. Problems will arise naturally (How do I print something to the command line? How can I store data in a list? How can I search an element in a list? ...), which is the best time to look up the solution. 3) Mentors are invaluable. If you live in a big city, there will be programming meetups. If personal contact is not possible, try to see somebody online.
All the best!
It's important since most of your work related to code will be reading code rather than writing it.
I disagree. You should write as much code as possible, run into as many problems as possible, and solve them. This is how you actually learn how to program. Feel free to play with and adapt other people's code along the way though.
> There is excellent code out there.
Sure, there may be "excellent code" out there by some standard, but nobody can agree on what "good code" is. Your application of "clean code" and "design patterns" might be considered overengineered enterprise junk. Your side-effect-free generalized functional code might be considered obtuse and academic. Your straight-and-to-the-point procedural code might be considered inelegant or "not modular enough". People have way too many strong opinions on this subject and they can't all be taken seriously.
Also, a lot of "excellent code" out there is written in older language versions, full of workarounds for problems that don't exist anymore. This is particularly important for Javascript or C++. The difference is is like night and day.
Agree, but as much as possible should be limited by reading other code. If one spends 95% living in his own bubble, he will likely progress slower.
> Sure, there may be "excellent code" out there by some standard, but nobody can agree on what "good code" is.
The exact semantics of "excellent code" don't matter here. For all practical purposes, "excellent code" is what a "hey I am a python beginner please tell me your three favourite codebase to learn from thank you" thread on reddit yields.
On the other hand, it is stupid to ignore advice by experts. It is also stupid to not become able to recognize experts. This is a very important step in becoming good in any field - recognizing people who are better than oneself.
That's not going to happen in the age of Google. My point is, don't just read code. You have to write your own bad code to actually build understanding. There are no shortcuts.
> On the other hand, it is stupid to ignore advice by experts.
When it comes to programming, it's stupid not to ignore advice by so-called experts, because a lot of it is mutually exclusive.
You need to be able to understand where an expert comes from and how to apply their advice to specific problems. Otherwise, you end up with cargo-cult programming.
This is not what you want to deal with at the beginner stage. In that stage, you want to train your brain to be able to program, not to deal with all the expert mumbojumbo. That's why it's better to start with BASIC (or Python, these days) than Java.
> It is also stupid to not become able to recognize experts.
No, that's actually the default state of being. In order to tell an expert from a snake oil salesman, you need to be an expert yourself.
> This is a very important step in becoming good in any field - recognizing people who are better than oneself.
Everyone is better than you at the beginning. That doesn't mean you should take advice from everyone.
Oh, absolutely one should build much stuff. Just don't get stuck in the own, in all likelyhood shitty, bubble.
> Experts
You made it sound fatalistic tho, as there were no use in even trying to identify experts. If you have difficulties telling experts from wanna-be experts, that is your problem, not the problem of beginners.
You also don't have to be an expert to recognize an expert. The level of competence needed is way lower than that. The level of social skills needed to recognize the different schools and camps is high tho. But this is rather a social problem than a domain-specific one.
No, that's not what I mean. Identifying experts is one thing. It's pretty easy to tell if someone is recognized as an expert by others.
I'm talking about appropriately evaluating and applying that expert advice. You need to be an expert yourself to actually do this, and it's not what beginners should concern themselves with.
> You also don't have to be an expert to recognize an expert.
You have to be an expert to evaluate other experts and their opinions.
Finding your first job will be tough, as you are competing with other developers who already have professional experience most likely, so just keep learning new technologies and building projects to improve your marketable skills.
I would reccomend reaching out to developers in your area to start conversations and ask for advice on what/where to learn.
That being said a year to become is a more realistic timeline.
One year working as software developer until I felt I could build a for-profit side-project, so I started working on my free time (~10 hours/week). 6 months after starting I launched a web app SaaS MVP.
So... That would be 2 years and 2 months from starting learning to code to launch a side-project SaaS functional product. For me.
The programming aspect is simpler, in general, and the hard part is knowing how to make sense of data.
E.g. https://www.udemy.com/course/data-analysis-with-pandas/
Of course, having finished a first course doesn't mean you know everything, or even that you have a good idea what you don't know. There's more to do after that.