Ruminations on Programming – 2November 6, 2008 at 10:37 am | Posted in Hacking, Programming | Leave a comment
Tags: C++, Lisp, newsgroup, programmer, Programming, software, usenet
This post does not contain anything except my own experience with programming. Its just my own experience of 3 years, 2.5 years to be exact, with programming. No, its not stolen. Some programmer from USA read my article on how to kill the poor quality software and then he asked if I stole it from somewhere. I had to tell him that its my own creation. What the heck, they are only my thoughts.
We will start talking on how to be a better programmer. I believe that using Linux to learn programming will give you an edge over the people using Windows. I also believe that if you dual boot your computer with Windows and Linux, you will never be able to learn anything about Linux, over a period of 10 years. I also advise you to use a Desktop Computer rather than a Laptop, unless you have very special and helpless requirements. One thing I am darn sure that can shape you in becoming excellent at programming is to hang at Usenet Newsgroups all the time, e.g. for C use comp.lang.c and comp.lang.c.moderated for Haskell and Lisp, use fa.haskell and comp.lang.lisp respectively. Hang there, read posts, reply to posts on what you think about them, ask questions, give answers. The market is highly competitive when it comes to a job in Software industry, where one has to rely on his programming talent and ability , which can be improved day by day at a miraculous rate if you keep on hanging on Newsgroups all the way. read Usenet before breakfast and after breakfast, read and write the problems before lunch and after lunch, ask questions and reply to queries before dinner and after dinner. Usenet 24 hours a day, you need to live with it, if you truly desire to become an excellent programmer. That may sound like a overfeeding problem but it is not. I told you, getting a Job in Software means high competition even when you have got the job and performing well and being a part of mass fired team is so common that you should not get amazed when 116 employees are fired along with you. You should expect it everyday. As a programmer, you need to check your official e-mail every morning for a termination letter. It sounds really bad and that is how we hi-tech programmers live everyday, in the shadow of penniless future. There is someone who say he is okay while he is living an average life by working only on job and not while in home, with kids. I feel sorry for you if you think that. Your only security is your talent and you need to improve that talent day in, day out, night in, night out. Everyone wants to have a family life and I have to say this painful truth that when you start doing a job, you must improve your programming skills and for that you need to do 2 things:
Use the office time efficiently and effectively so that your productivity is more than that of your colleagues. You will not get any extra hour than your colleagues, for everyone has 24 hours in a day. Its only the use of those hours and minutes that will put on different and productive front.
Invest your personal and family time into learning the new concepts. Learn what most programmers are weak at, Problem solving, Algorithms, understand when to use which Data Structures , learn a new language which focuses on solving problems elegantly while being a real-life language (like Haskell, Mercury and Common Lisp) while at the same time not focusing on languages which exist purely for monetary reason on this Earth. Working in those languages at your home will give you a new perspective on programming and will definitely equip with an ability and tools that very few will have and those tools and the experiences will serve you all your software life.
Whatever I am describing here is purely from general purpose programming perspective only. Its not directed to one language or one platform in anyway. Its not even directed at solving some particular problems. Its also not about being good at what you do for for bread and butter. Its about living a quality life. Its about thinking about Software on the Monday morning, its about coding while you are in your Friday dressing. If you are not willing to spend next 10 years, perfecting your craft of programming, you better look for some other job or do an FMCG business, a good idea for making 10 times of what you will earn in doing a programming job. So here are my technical ruminations, not in any order, based on my own experience with programming:
Remember, we programmers, are problem solvers. My first rumination is in realizing that we are problem solvers.
As programmers, we identify the problem at first. We explain *what* first, we need to be very clear on what exactly is the problem we are going to work on. Many programmers identify the effect of the problems to work on rather than the original cause of the problem. This thing needs to be avoided. Identifying the specific problems to solve is one of the most important skills in programming, if not most. If you mess-up this first step, you will mess-up the whole software.
We choose tools to solve the particular problems. Those tools may be a collection of data structures, may a set of algorithms and may also be some components of Standard Libraries shipped with particular language implementation. e.g. in Socket Programming, we use Networking components like bind(), recv() and threads to solve our networking problems.
We need to practice different ways of collecting and organizing those components so that we can put a structure to them to resolve the problems we are working on. There are many ways to put the components collection into a structure and with experience we will learn and master many of them. It is called the design of the program but design is very subjective word, thats why I used word structure as the approach to put together the components.
Many students and even majority of programmers ask a question like “Which language is good for my career, C++ or Java ?” . This stupid question shows the stupid mentality of the seeker. The whole basis on which the question is based is wrong, the thinking about what programming is, in that person’s mind, obtuse. That man needs to take fresh look at what he has learned and should file a human-rights harassment suit against his college(university). There are no careers in programming languages, there is no career in Java, there is no career in C++, there is no career in Oberon and for the heck of emphasizing, there is no career in Lua. There is a career in some domain, there are careers in different domains like System Programming, Telecommunications field, Embedded Programming, GUI development and there are careers in Web Development. There are many types of domains and there are always more than 2 or 3 programming languages used in one domain. Besides that learning about a domain is whole time consuming task. Try doing 3D-programming and tell me. So as good programmers we are supposed to know about the problems of our domain. We need to get familiar and understand the different types of problems occur in the particular domain we are working on and prhaps make a mental note of all of them. It takes some years before you get proficient.
This also belongs to the last point. We need to get familiar and understand what types of solutions are used to solve the types of problems identified in step 4. We need to read and find what good programmers and hackers use to solve the particular set of problems in our particular domain. More you do, the better you will be. These 2 steps must get familiar to you like you are familiar with the tastes of foods you like. You just recognize them by smelling or biting the different foods a little. Same way it needs to work for domain problems and the way hackers approach for their solutions.
You can be better programmer, if you will make it happen buy practicing, practicing and practicing…. oops! I am sorry, I was wrong you can not become a good programmer just by practicing, practicing and practicing. The old age saying “Practice makes a man perfect” shows only the partial face of the problem. The other 50% is You also need a company of excellent programmers who will tell you where you are wrong and right and will dictate and improve your programming ability and will teach you what is called quality practice. Practice does not make a man perfect, only quality practice makes a man good at something. That company must consist of helpful and technically sound people. Fortunately that community is existing here from much longer times , it is called Usenet: UNIX Users Network… eat it. HTH, HAND.
Copyright © 2008, Arnuld Uttre, #331/type-2/sector-1, Naya Nangal, Distt. – Ropar, Punjab (INDIA) – 140126
Verbatim copying and distribution of this entire article are permitted worldwide, without royalty, in any medium, provided this notice, and the copyright notice, are preserved.