How can you become an expert programmer in a week?
Day 1: Intro. Read The Art of Computer Programming. Make sure to do all the exercises. (If you’re slow or crunched for time just do volumes 1–3.)
Day 2: C++. Read and memorize the C++14 standard. Make sure you fully understand lambdas, move semantics and templates.
Now that you’ve got the basic knowledge it’s time to gain some practical skills…
Day 4: System programmer skills. Implement an OS from scratch. Make sure it supports multiprocessing and some form of reliable transmission protocol as you’ll need this for day 5. (A fully operational TCP/IP stack might be a bit much in a single day, but kudos if you manage it.)
Day 5: Distributed systems/cloud computing. Implement a cloud framework with hardware provisioning, durable storage and a distributed database. Extra credit: metrics, billing, edge cache.
Day 6: App/Web development. Build an app that runs natively on iOS, Android and a traditional web client. (It’s probably fine to skip desktop clients as they’re on their way out.)
Day 7: Review. Congratulations! You’ve learned a lot in the last week. Review your work, fill in any areas you feel are deficient, and start sending out your resume!
If you’re interested in learning the basics of a programming language, there are any number of books that can provide the basics in a relatively short period of time (assuming you actually put in the effort to read and understand the lessons, and do the practical exercises). Perusing the programming section of any major bookstore should find you at least one or two that provide coverage of the language of your choice.
These will by no means get you to more than an introductory proficiency within a week though. That usually requires previous programming experience, where the majority of what you are needing to learn is the syntax differences rather than the fundamental concepts involved in programming.
Here some tips on how you can master you programming skills and it’s definitely will take you longer then a week but even though it’s worth it to follow.
Here is the Tips:
- Get started. Do not feel bad that you are not an expert programmer yet. In 10,000 hours, you will be. All you need to do is start. Dedicate some time each day or week to checking things off this list. You can take as long as you want or move as fast as you want. If you’ve decided to become a great programmer, youve already accomplished the hardest part: planting the seed. Now you just have to add time and your skills will blossom. If you need any help with any of these steps, feel free to email me and Ill do my best to help.
- Dont worry. Do not be intimated by how much you dont understand. Computers are still largely magic even to me. We all know that computers are fundamentally about 1s and 0s, but what the hell does that really mean? It took me a long time to figure it out–it has something to do with voltages and transistors. There are endless topics in computer science and endless terms that you won’t understand. But if you stick with it, eventually almost everything will be demystified. So don’t waste time or get stressed worrying about what you don’t know. It will come, trust me. Remember, every great programmer at one time had NO IDEA what assembly was, or a compiler, or a pointer, or a class, or a closure, or a transistor. Many of them still dont! That’s part of the fun of this subject–you’ll always be learning.
- Read books. In December of 2010 I spent a few hundred dollars on programming books. I bought like 20 of them because I had no idea where to begin. I felt guilty spending so much money on books back then. Looking back, it was worth it hundreds of times over. You will read and learn more from a good $30 paperback book than dozens of free blogs. I could probably explain why, but its not even worth it. The data is so very clear from my experience that trying to explain why it is that way is like trying to explain why pizza tastes better than broccoli: Im sure there are reasons but just try pizza and you’ll agree with me.
- Get mentors. I used to create websites for small businesses. Sometimes my clients would want something I didnt know how to do, simple things back then like forms. I used to search Google for the answers, and if I couldnt find them, I’d panic! Dont do that. When you get in over your head, ping mentors. They dont mind, trust me. Something that youll spend 5 hours panicking to learn will take them 2 minutes to explain to you. If you dont know any good coders, feel free to use me as your first mentor.
- Object Oriented. This is the “language” the world codes in. Just as businessmen communicate primarily in English, coders communicate primarily in Object Oriented terms. Terms like classes and instances and inheritance. They were completely, completely, completely foreign and scary to me. Theyd make me sick to my stomach. Then I read a good book(Object Oriented PHP, Peter Lavin), and slowly practiced the techniques, and now I totally get it. Now I can communicate and work with other programmers.
- Publish code.If you keep a private journal and write the sentence The car green is, you may keep writing that hundreds of times without realizing its bad grammar, until you happen to come upon the correct way of doing things. If you write that in an email, someone will instantly correctly you and you probably won’t make the mistake again. You can speed up your learning 1-2 orders of magnitude by sharing your work with others. Its embarrassing to make mistakes, but the only way to become great is to trudge through foul smelling swamp of embarrassment.
- Use GitHub. The term version control used to scare the hell out of me. Heck, it still can be pretty cryptic. But version control is crucial to becoming a great programmer. Every other developer uses it, and you can’t become a great programmer by coding alone, so you’ll have to start using it. Luckily, you’re learning during an ideal time. Github has made learning and using version control much easier. Also, Dropbox is a great tool that your mom could use and yet that has some of the powerful sharing and version control features of something like git.
- Treat yourself. Build things you think are cool. Build stuff you want to use. Its more fun to work on something you are interested in. Programming is like cooking, you don’t know if what you make is good until you taste it. If something you cook tastes like dog food, how will you know unless you taste it? Build things you are going to consume yourself and you’ll be more interested in making it taste not like dog food.
- Write English. Code is surprisingly more like English than like math. Great code is easy to read. In great code functions, files, classes and variables are named well. Comments, when needed, are concise and helpful. In great code the language and vocabulary is not elitist: it is easy for the layman to understand.
- Learn Linux. The command line is not user friendly. It will take time and lots of repetition to learn it. But again, its what the world uses, you’ll need at least a basic grasp of the command line to become a great programmer. When you get good at the command line, its actually pretty damn cool. Youll appreciate how much of what we depend on today was written over the course of a few decades. And youll be amazed at how much you can do from the command line. If you use Windows, get CYGWIN! I just found it a few months ago, and it is much easier and faster than running virtualized Linux instances.