A couple years ago, I worked together with Ken Thompson on the interactive graphics language that was developed by Gerard Holzman in Bell Labs. I was typing quicker, therefore, I sat at the keypad, and Ken stood behind me. We worked quickly and when the compiler gave out an error, I started reflexively digging in a problem, studying the call stack, program output and launching a debugger, and so on. But Ken simply was standing nearby and thinking, ignoring me and a code, which we just wrote. Soon I noticed regularity that Ken often understood the problem faster than me and was saying, “I know, what is going on”. Usually, he was right. I understood that Ken built the mental model of a code, and when something was broken, it was the error in this model. He was thinking of how this problem could arise, so he explained what was wrong with model, or where our code could mirror this model incorrectly.
I have little experience (summarily I have been working as a programmer nearly for 16 months), nevertheless, I would like to give some tips to myself in the past, or in other words, to those who are studding now at the university and planning to become a software developer. I do not have a claim on wisdom or experience on no account. While thinking a little, I understand that all these tips are very actual for me more than ever too. I published the first note in my blog last year, and now I am publishing here the list expanded with tips of the readers of this blog.
All tips are independent and their order does not matter.
1. Learn a new programming language
Learning the new programming language will develop new ways of thinking, especially if the new language uses a paradigm that you do not know yet. Many of the acquired ways of thinking could be applied to the languages that are already known. Perhaps, you might even like the new programming language, and you will start using it for new serious projects.
Here are some good languages that give the great educational experience and cognitive effect: Lisp (Scheme is good), Forth, PostScript or Factor (stack-oriented programming languages), J (wonderful array programming language), Haskell (strongly typed purely functional programming language), Prolog (logic programming) and Erlang (concurrent programming goodness).
2. Read a good programming book
A lot of knowledge could be found in the books. Undoubtedly, a practice is also important, but reading one challenging programming book might help you to challenge your thinking and to enrich your knowledge. Here is a list of such challenging books: The Art of Computer Programming (if you want a real challenge), Structure and Interpretation of Computer Programs (SICP), A Discipline of Programming or the famous dragon book.
Of course, you can read less complicated books as well, but you try to go around books such as “For Dummies” that promise to teach you in 24 hours or 3 weeks. These books will not do any good for you in terms of improving programming skills.
The website habrahabr.ru has a lot of articles about the completed projects (startups), advice on how to become successful and how to finish the game.
So, advice on how to fail the project:
1) If you need in a project graphics, everyone should try to be an artist in the team. If the job is given to one artist, all should to take part in the discussion of result, give advice and generally help in every way. The artist constantly should redraw and revise in order to please everyone at once. In general, democracy is the best way to solve all the problems in the project.
2) The concept is not needed, why should you waste the time? The main thing is to start as quickly as possible to write code and the ideas and concept should come on the way. Who will quickly begin to program that will be able to book the most interesting tasks.
Do you read business blogs in which the author repeatedly describes his failures?
No, because you want to adopt the successful experience, and not to learn about experience from a guy who is not successful.
However, the fact that you have been studying only the experience of successful people could present a big problem than it seems.
Here are some stories that will help you understand the seriousness of this problem.
Marks from the bullets
During the Second World War the British bombers were sent daily to bomb the Germans. Most of the planes did not return home, and those that came back were covered with marks from the bullets of German anti-aircraft guns and the fighter planes.