We captured this Q&A piece from Quora which is increasingly becoming a rather inquisitive platform with its million users. No tutorial can muster a genuine advice session like this hence this is a must read for every wannabe programmer.
Q: How do you become a good programmer?
Details:
I’m a computer science student who’s 1 year away from graduation, currently I’m not better than a beginner programmer (actually, I didn’t gain much the last few years), I think the problem is that my university believes that computer science can be done theoretically, I actually went a lot of courses yet I can’t use any of them, I know about data structures, but I never implemented them, so I don’t really use them because I don’t know why would I go through with it. And actually I’m one of the best in here, the average (1 year away from graduation) student here barely can write a “Hello World” program.
Recently I decided to stop paying attention to college and try to go through the whole thing by myself from the very basics, to make sure I erased all the information I got through this place, I began by reading a beginner C++ book (leaving Java), which covered a lot of the basics, like object oriented basics and inheritance, but now I’m stuck, I don’t know where to go from here, I’m still an awful programmer and a year from now I’m going to be looking for a job, what should I read into next? what should be my focus from now on? Is there some guide to what I have to learn (in a sequence) to become a better programmer? what can I do now that can be added to my CV that will raise my value?
Also the usual advice is, program a lot, well I don’t really know what to program, and I’m not even capable of doing anything more than console programs (which will never look impressive), and I competitive programming seems too hard for my current level (and even when I do some of the challenges, I compare it to other answers, mine is just pathetic), what kind of programs you did when you were beginners?
Answer 1:
By Bob Ippolito, Founder of Mochi Media. Python, JavaScript, and Erlang hacker.
Write code as often as you can. If what you’re doing at work or school doesn’t inspire or challenge you, contribute to or start some open source projects. When you read code, think hard about what it’s doing and consider how it could be refactored to be more robust or maintainable. Learn how to debug code that you’re not familiar with, especially code that you don’t even have the source for. Constantly practice writing relevant tests and good documentation. Write a blog or keep a code journal. Help other programmers. Explain code to non-programmers. Teach. Speak at technical conferences. Learn new programming languages, platforms, and frameworks whenever you start to get too comfortable. Read books and take advantage of the amazing free courses and content on the Internet.
Keep at it for at least a decade or two, and most importantly you should continually refine your definition of what a good programmer should be.
Answer 2:
By Simon Willison, Web Engineer, CEO of Lanyrd.com
In my experience new programmers progress a LOT faster if they’re learning with a higher level dynamic language such as Python or Ruby than if they only use C++ or Java. That’s not to say it isn’t a good idea to learn Java/C++ (though I’d encourage you to learn C as a lower-level language) but you may find you pick up programming concepts a whole bunch faster with a language that has a good interactive prompt.
Personally I think Python is a fantastic learning language – it’s great for beginners, but it can also be used to solve real-world problems. The official Python tutorial is an excellent starting point: The Python Tutorial
Answer 3:
By Aditya Aggarwal
Being a beginner is a relative term. You said that you are the best in your class. So, in relation to your class you are a frigging expert but in relation to the outside world, you just lack some knowledge of CS. Sol, get the notion of “not being able to do something because I am a beginner” out you head. Once, you know even the bare essentials of anything, you are good to do. It can’t be more true for a field where creation is all that matters. So, if you want can count computer science to be such a field.
As far as what to do now is concerned, the only real advice is the one you already know:- CODE A LOT. You say that you don’t know what to code. Well, here algorithmic coding and open-source development come to your rescue. You said that you are one year away from your graduation and from reading your question, it seems that your theoretical knowledge would be decent enough. This means you would be having some, no matter how superficial, knowledge of various topics in computer science which enables you to understand if you like a subject or not. At your level, fascination by a subject is all you need. You don’t need to know if there is some scope of doing something really interesting in a field. That will come later. Right now, just pickup a field which happens to catch your notice or fascination or whatever and dive in some open-source project related to that field.
Let me give an example ( other than web programming which has been covered in the other answer ). Say you find DBMS to be very interesting ( and it also happens to be in great demand in the software business ). You know some basics of DBMS and you are learning C++. Pick up a project like A database for the cloud ( Drizzle )or The world’s most advanced open source database ( PostgreSQL ) or any project related to DBMS from The Apache Software Foundation . Start reading its documentation so that you get an understanding of the project and its working but also keep on working on your C++. While you are doing these things, go the IRC of the project and start asking questions about the project and how can you contribute there. You can give your current strengths and ask if you can help. If you can, then someone will point you in the right direction and if you can’t, then someone will tell you the holes in your knowledge which needs to be filled. They might even suggest you to learn some other language. By all means, do that. Don’t lose enthusiasm here as this whole procedure is quite tedious. Also, while you are working on programming ( like C++ ), don’t stop solving algorithmic problems. At first, just make sure that your solution works and satisfies the time and memory constraints. Elegance comes with practice. Once you solve the problem, don’t settle. Read the solutions of other people. They will be better than yours. That’s whole point of reading other people’s code. All this reading of code will fill in the holes and reinforce the facts you learnt.
Answer 4:
By Devdas Bhagat
You may want to reconsider your question.Computer Science is theoretical. CS is mathematics.Computer Programming/Software Engineering are the applied fields. To become a better programmer, deliberate practice is what you need. You need to know how to write code from scratch, debug code (your own and that written by others), possibly solve business problems, possibly dive back into your theory to learn how to solve hard technical problems.Choosing any programming language, spend a few years learning to solve real problems in it. Then choose a language with a different paradigm. Programming ParadigmRinse, lather, repeat. Teach Yourself Programming in Ten Years is probably another useful read.
Answer 5:
By Thomas Tydal, software developer, teacher, train driver
Console programs will never look impressive? What do you think about Quora? It’s just one of many examples of what console programs can do.Write a console program that saves the following string to a file: “<!DOCTYPE html><html><head><title>H
Html/css/javascript is not something that looks good on your CV though, it just has to be there. Php, almost the same thing. But SQL will look good and Android would look good too.
There is a lot you can do in web development. Personally I have too many ideas and too little time. Think about your hobbies and how others could benefit from your knowledge. Or think about a web site you yourself would need.