This article discusses the habits which would need to be avoided if a person wants to become a good programmer.

Introduction and background



The information technology is not a new term now. For a common person, this is the field which guarantees good money and life (in the context of INDIA). People working in this industry are looked up-to and generally considered intelligent than others. 
After working for quite some time in this industry, looks like the above points are coming very close to being a myth.
Definitely this industry has been life changer for many and also big employer, foreign currency grabber but by large it would be interesting to know what’s the reality at ground level.
Many would comment that the quote about intelligence is overrated and this is just another industry with revenues in dollars helping for mammoth turnovers.
The common minimum ingredient of this industry is a programmer (or a developer or coder) who is the one writing the programs which are supposed to make things happen. As in every field of life, there are good programmer and bad programmers. The other hot topic in this industry is whether this industry possesses chunk of good programmer or not. Many wouldn’t agree.
So, what makes a good programmer? This is debatable point and to make things simpler, let’s see this the other way round i.e. discuss the top 10 enemies which can prevent oneself from becoming a good programmer.

Objective


To know about the DONT's if anyone wants to become a good programmer.

Description

Programming world is a confusing world. There have been so many languages, technologies, platforms, infrastructures to choose from which doesn't make life of a programmer easy even though they are supposed to. In the scenario where business needs are outscoring the engineering practices, the programming has become a real complex thing increasingly challenged by time and budget. There has been lot of research into software metric to measure the performance and quality but it still not straightforward to categorize programmers and probably say who is good or bad. Following are list of points which if we can ensure while programming, would definitely result in better code quality, better planning and better professional life. These points are picked up from real incidences which always keep happening with considerable frequency and it is observed that such incidences leads to poor quality, performance and higher costs. These points are not just related to technical skill but rather the attitude, awareness, behavior.

1. Is it computer or my program: When something goes wrong there is a tendency to term that it must be something wrong with computers or something else other than me? It’s funny but it omnipresent statement one hears. Barring few cases, it’s always the program doing something wrong rather than computer. If we take environmental, infrastructural attributes into account while programming we won't end of saying this. This is the biggest enemy.
2. Its working on my PC: This is probably mostly used age old statement and many have encountered it umpteen times. It is hard to believe but it happens all the time that the programs work well on developer’s machine but fail after deployment... Do we program for our own pc or our programs are intended to run only on the developer’s machine? Surely not and this is caused by insufficient programming skills and not enough knowledge of working environments, necessary settings etc.
In most of such cases, mostly the programmer has forgotten to update the deployed environment with some settings/ configurations, some component missing etc. rather than anything else.
3. Finger pointing: I have just changed it but I didn’t cause this error, it must be somebody else who might have worked on the same stuff. This is a statement one would hear all the time and it’s generally the first reaction one would hear when asked about some error or fault. In reality, something is changed and the original functionality is also lost then these statements are made. This is quite intriguing that something is changed and before a change things were working and still the programmers say this. This depicts the lack of ownership as well as understanding and escapist attitude. Given the complexity and difficulty to find the facts, many are encourage saying this.
There is a small remedy to overcome this and which is the practice of performing unit testing and take my word, life would be easy.
4. Skipping the validation of user input: While programming for user interactive applications / programs, one tends to skip the validation of user inputs under the assumption that he has coded for it and it shall work. The minimum check which is like confirming the data entered in GUI doesn’t exceed the data type and lengths defined in the database. No wonder, many of the defects and also the program crashes arises out of lack of such validation.
It is better to always ensure that the data types and lengths on GUI matches with the ones defined in data source and also it handles the common pitfalls which can spell doom for hackers. 
5. Not estimating (or planning) the work or tasks: Most of the programmer (especially junior ones) has urged to jump into coding without estimating the work. Estimation is just not important from planning perspective but it gives an opportunity to revisit the scope as the estimates are bound to scope.
There might couple of tasks challenged by time and/or budget which can be performed well without estimates but not     all. Whatever may the work or tasks if it is estimated, then it ease out planning, controlling and monitoring and also         given an avenue for asking the help before it is too late?
6.   Swallowing the exceptions: Exception handling is still a mystery for many programmers and when he/ she don’t know how to handle the exception or there is lack of good exception handling mechanism, the exceptions are swallowed means not action is taken after the occurrence of such exceptions or errors.
     Today's programming languages offers far more sophisticated mechanism in the form of try-catch-finally. This           swallowing mostly results into application crashes putting programmers into awkward position.
7.   Blindly copying and pasting: In today’s internet era, everything is available on internet and code snippets are not exceptions to this. With super-efficient searches, it is possible to locate code snippet which can do one's job.     
Probably it can't be called wrong to copy such code snippets and use but unfortunately the usage is always coincided      by blindly copying or retrofitting which results into partial solutions not taking into account the existing scenario. Also      one has to remember that such code snippets needs more rigorous testing than your native code to make sure that it      is doing what is needed. Another example is copying from code samples or others code which generally skips the            understanding curve resulting into inferior quality software and it is also difficult to change such program and                  maintain too. So copying and pasting is unavoidable but it would be better to invest some time to understand what it      is doing and what is expected to be done and perform this with sound judgment.
8. Not being latest: The technology paradigm is characterized by the continuous changes and improvements. While working hard and long, many programmers are not able to synch them up with such changes and improvements. This may result in inferior solutions or far more time investment than could be justified. Also there are many changes happening on software engineering front where new methodologies like Agile, XP are introduced which can address many pertinent challenges in development life cycle.

9.  Lack of Documentation/ comments/standardization: No denying the fact the programs are written to be executed by computers but they are also written which could be understood by others. Many programmers shy away from writing enough comments or documentation which can help others about why, how and when something is done. Essentially this makes other programmer not attempting to understand and write something which would add to confusion. There are many instances of coding horrors, coding mess, coding chaos which have one thing in common and i.e. lack of documentation and standardization. Essentially the programs shall be human readable.

10. Speed well than accuracy:This is a trap for even the proven programmers. Many programmers think that the programming is 100 ctr races and one has to be lightning fast to win this race and in the process the quality, accuracy is sacrificed. This catapults into more work (many would want this for continuity of their business) which is not good of one looks at cost and time. Accuracy could attain more priority and speed with accuracy could be the motto. 

Summary and Conclusion

This topic is exhaustive and complex to discussed and addressed on one write-up. Still these 10 point are put forth to touch base the perennial challenges in software industry. There may be more apt points and detailed discussions but hope that this write-up could help to bring some really interesting practices to the fore.

10 enemies of being a good programmer

Đây là 1 comment của bạn Hoàng Minh Triết. Bạn ấy đề nghị tôi đưa lên thành 1 bài viết. Nhận thấy đây cũng là 1 chia sẻ rất hay nên tôi tôi quyết định đưa lên để mọi người cùng chia sẻ ý kiến của mình.

Cám ơn bạn Triết rất nhiều!

Lựa chọn ngành CNTT: Tôi đã đi lầm đường hay có quá nhiều quyết định sai trái?

1/ Bước vào cổng đại học

Cách đây 5 năm, sau khi tốt nghiệp PT tại 1 trường thuộc hàng top tại tp.hcm, tôi quyết định chọn thi vào ngành CNTT, và xác định trước hướng theo học là công nghệ phần mềm.

Theo lời khuyên của ba tôi, tôi cũng vào học tại 1 trung tâm đào tạo lập trình viên Aptech, để vừa có bằng đại học mà tiến thân, vừa có kỹ năng làm việc thực hành. Điều kiện của tôi thuận lợi hơn tất cả mọi người cùng trang lứa, và sức học của tôi cũng khá, dễ dàng vượt qua các bài thi. Thậm chí, đến giai đoạn chuyên ngành điểm các môn chuyên ngành có thấp lắm cũng chỉ dừng ở 7, và phổ biến ở mức 9,10.

2/ Có nên đi làm trong lúc còn đi học?

Lúc đó là vào khoảng đầu năm 3 đại học, tháng 11 năm đó, tôi cũng vừa tốt nghiệp xong chương trình LTV Aptech, và cũng hào hứng háo hức đi làm. Chỉ sau 3 ngày post hồ sơ lên các trang mạng tuyển dụng, có hơn 4 ,5 công ty gì đó mời cộng tác.

Tôi hớn hở về nhà khoe với ba mẹ, thì được ba mẹ phán cho mấy câu xanh rờn “Nhà mình đâu có thiếu thốn gì mà phải đi làm. Ba còn đi làm, kiếm ra tiền, con muốn học gì thì học, ba mẹ không có tiếc tiền với chuyện học của các con. Chuyện gì chứ chuyện học thì không bao giờ từ chối chi tiền. Giờ cứ lo học cho xong cái bằng đại học đã, rồi muốn đi làm gì thì làm.”. Khi đó tôi có vẻ xìu xuống, nhiệt huyết đi làm giảm dần nhưng vẫn chưa từ bỏ ý định.

Vài hôm sau lên văn phòng khoa xin cái bảng điểm thì gặp cô phó khoa cũng phán cho 1 câu xanh rờn từa tựa như vậy: “Mấy em cứ học xong hết đi rồi hãy đi làm, đừng có gấp, đừng có ham đi làm.”. Thời gian đó cũng sắp thi học kỳ, cộng với bao nhiêu lời khuyên của những ng xung quanh, ý định ban đầu không còn chắc chắn nữa, lung lay dần đi.

Tôi quyết định nghe theo mọi người, cũng vì câu mà mẹ tôi hay nói: “biết nghe lời đi, đứa nào cãi tao thì chỉ có chết tới bị thương”, và mỗi khi tôi thất bại thì mẹ hay lôi câu đó ra mà phán. Nghe cũng có vẻ hợp với cái lẽ: “cá không ăn muối cá ươn…”. Thế là tôi từ bỏ hẳn ý định đi làm từ sớm, mặc dù rất muốn.

3/ Ra trường

2 năm sau đó, sau khi hoàn tất chương trình đại học, và vượt qua 1 cái luận văn mà nội dung cũng thuộc hàng xương xẩu để lấy 1 điểm số tốt, tôi chính thức tốt nghiệp đh sau đúng 5 năm học. Bảng điểm sạch sẽ, không nợ môn nào trước khi làm luận văn.

Có 1 dịp tình cờ gặp lại thằng bạn thân hồi cấp 3, cũng đã tốt nghiệp ĐH Khoa học tự nhiên. 2 đứa đi cafe karaoke cả buổi với mấy đứa ban nữa để tâm sự. Nó nói: tao thất nghiệp nửa năm nay. Lúc đó tôi cười thầm, không nói gì, cũng không nghĩ gì, vì tôi lạc quan , và có niềmtin vào khả năng của bản thân để bắt đầu 1 hành trình mới:

4/ Đi tìm việc làm.

Nhìn lại bộ hồ sơ tìm việc làm:
+ bằng cấp: đủ
+ bảng điểm: tốt
+ chứng chỉ quốc tế: luôn là 1 lợi thế
+ ngoại ngữ: cũng khá, có điều chỉ đọc được tài liệu chuyên môn chứ giao tiếp thì _@#(%&$*^.
Tôi bắt đầu apply vào những công ty thuộc hàng “ăn trên ngồi trước” trước. Khổ cái:
+ cty nước ngoài thì đòi tiếng Anh giao tiếp
+ các công ty lớn thì đòi kinh nghiệm 2,3 năm.

Tôi bắt đầu “hạ chuẩn” xuống: lương thấp hơn 1 tí, công ty bình dân hơn 1 tí, thì gặp phải đòi hỏi: 1 năm kinh nghiệm: he, cái này không thành vấn đề, nhưng nhìn lại vị trí, công việc, và công nghệ sử dụng, thì nó lại có vấn đề.

5/ Khó khăn nối tiếp khó khăn

Ở ĐH cũng như Aptech, tôi chỉ học về các công nghệ cao cấp như J2EE, .NET là chủ yếu, còn những món như PHP thì không quan tâm lắm. Qua 1 thời gian theo dõi, tôi thấy các cty bây giờ hay chuộng tuyển lt viên làm web, với PHP,MYSQL và 1 số CMS như Joomla, hay Framework Drupal, Template Smarty gì gì đó. Tôi chỉ có biết 1 ít về PHP, vì nó giống C,C++, MYSQL thì cũng có khác gì nhiều so với SQLSERVER đâu, nói chung những thứ lặt vặt về web tôi đều làm được cả, chỉ là chưa biết và chưa có kinh nghiệm với cácCMS,Framework trong lĩnh vực này.

Tuy nhiên 1 cái khó nữa là đã lập trình web, phải biết về nào là Flash, Photoshop,… cái này thì tôi mù tịt hoàn toàn. Tôi chỉ biết chờ đợi xem có công việc nào phù hợp hơn với mình hay không. Nhưng càng ngày cơ hội việc làm càng ít đi. Dạo qua các trang tuyển dụng thì thấy xu hướng tuyển dung như sau:

6/ Xu hướng tuyển dụng tại VN vao thời điểm tháng 6,7 / 2009:

+ Hà Nội: tuyển ltv nhiều, ít kn hoặc mới ra trường chưa đi làm cũng được – nhưng tôi ở HCM mà v
+ HCM: tuyển ltv ít, nhưng phải có kn làm việc 2,3 năm, chỗ nào bèo lắm thì cũng 1 năm + với 1 số thứ tôi không biết như nêu trên.
Ngoài ra, các cty pm tại HCM hiện thời điểm này lại có xu hướng
+ hạn chế tuyển ltv
+ mà tuyển hàng loạt tester
+ và nhân viên kinh doanh phần mềm.

Oax, trong đh chả có môn nào đào tạo về quy trình test, hay kỹ thuật test cả, có chăng môn CNPM thì nói 1 chút, mà cũng chỉ cưỡi ngựa xem hoa qua lý thuyết, hoàn toàn không chú trọng hay nhấn mạnh gì. Còn về vị trí NV kinh doanh pm thì tôi chả quan tâm, vì tôi học rất khá , và mong muốn làm đúng vị trí chuyên môn phù hợp với mình thôi.

Đảo qua đảo lại, tôi thấy nhu cầu tuyển dụng của các cty và khả năng của tôi càng ngày càng ít “khớp nhau”, “hạ chuẩn” chút nữa, tôi chuyển sang tìm các công ty tư nhân cần nhân viên IT. Đối với các cty tư nhân tuyển NV IT như thế này, thì họ chả yêu cầu ngoại ngữ cao, cũng chả yêu cầu lập trình quá giỏi, mà cái họ cần là: 1 NV IT đa năng:

+ lập trình web
+ kiêm webmaster
+ kiêm cài phần mềm
+ bảo trì máy tính
+ đi dây mạng
+ quản trị mạng
+ quản lý csdl, ….
…cái gì cũng làm, nhưng mà lương thấp chủn.

7/ Một thoáng lo âu

Ngày qua ngày cứ lặp lại, nhiều hôm buồn thức đến 3,4 h sáng để vào mấy trang tìm việc, dù biết giờ này còn ai tuyển nữa chứ, mà những tin đó thì trong ngày đã đọc rồi. Thậm chí có những hôm chiều thứ sáu, tôi tranh thủ đọc cho hết mấy cái tin tuyển dụng rao đầy trên mạng nhưng… chả ăn nhậu gì với thứ mình cần tìm, chỉ sợ mai thứ 7 cuối tuần thì không còn gì để đọc.

Ngó lại những thứ họ cần:
+ Nếu là tuyển sv mới tốt nghiệp, thì thường là cty nước ngoài, tuyển về đào tạo lại, và cần khả năng tiếng anh rất lưu loát
+ Nếu là lập trình quản lý với java, .net , thì cần nhiều năm kinh nghiệm
+ Nếu là lập trình web với php, thì cũng phải cần flash, photoshop, design…
+ Nếu có là NV IT quèn, cũng phải cần quản trị mạng, đi dây mạng, làm những thứ linh tinh như sửa máy, cài pm
+ 1 số cty nữa tuyển nv mới tn lương cũng rất khá, nhưng lại làm việc lập trình driver, hệ thống với C,C++ cái này lĩnh vực này bó tay
+ 1 số chỗ tuyển lập trình game, lập trình mobile: không biết tí gì, muốn làm cũng phải bỏ ra vài tháng học và nghiên cứu về mobile environment, graphics 2d,3d – món này không đơn giản , mà đến lúc đó nó hết chỗ rồi (#@&$(#, mà lĩnh vực này rất ít chỗ tuyển thì phải.

8/ Tôi bị mắc sai lầm ở cái công đoạn nào nhỉ?

-> đáng lẽ ra nên chú trọng học ngoại ngữ giao tiếp, hơn là ôm cái mớ kiến thức chuyên môn cày project hết ngày này qua ngày khác?
-> đáng lẽ nên học những thứ bình dân nhưng dễ tìm việc như PHP,MYSQL,Joomla,Flash,Photoshop, hơn là những cái của cao cấp như .NET, J2EE (muốn làm thì phải có kn nhiều năm, mà mới ra trường thì….)
-> không giữ vững lập trường : đáng lẽ nên đi làm từ năm thứ 3 khi có chỗ gọi, để đến bây giờ thì cũng đã có 2 , 3 năm gọi là kinh nghiệm rồi.

Bây giờ công việc hàng ngày của tôi là: học tiếng Anh, học photoshop, học flash, và chờ có chỗ nào nó mướn làm web mà không đòi hỏi đồ họa thẩm mỹ cao thì nhào vô xơi. _o. Thế đấy, học hành cho cố vào, rồi bây giờ thất nghiệp.

Cho đến tận hôm nay, vào mấy trang tuyển việc làm cũng còn quá hẻo, toàn tuyển NV IT , quản trị mạng, và thiết kế đồ họa, flash, actionscript gì đó. Lúc mới vào đh thì CNTT là 1 ngành hot, và cái công việc lập trình viên có vẻ hấp dẫn hơn những thứ này nhiều.

Giờ ra trường rồi, thì thời thế đổi thay. Người ta còn có chỗ dựa hơi, quen biết “này nọ” mà kiếm cái chỗ nương náu, còn đây thì (#&(@#% tự bươn chải. Mặc dù rất chán nản, nhiều hôm gục lên gục xuống nhưng vẫn kiên trì, với chút hy vọng nhỏ nhoi, biết đâu “qua cơn bĩ cực tới hồi thái lai”.

Vô tình đọc được
Còn đầy là ý kiến của thầy Huy, dạy PHP ở Việt Chuyên :
Riêng về quan điểm của tôi trong nghề nghiệp, theo tôi để nhanh tiến tới thành công thì các bạn nên học tích cực khi còn đang ngồi trên ghế nhà trường. Nếu các bạn chịu khó đầu tư tiếng anh và kỹ năng lập trình từ năm nhất thì khoảng cuối năm 2 có lẽ bạn đã khá cứng cáp với nền tảng xây dựng từ đầu. Khi đó bạn có thể đi nhận các dự án theo dạng part time để lấy kinh nghiệm. Đến năm thứ 4 khi bạn ra trường bạn đã có trong tay 4 năm nghiên cứu ngôn ngữ lập trình PHP và 2 năm kinh nghiệm thực tế. Cố gắng tốt nghiệp ĐH với tấm bằng trung bình – khá hoặc khá (đừng để trung bình). Vì như thế CV của bạn sẽ mất điểm trước nhà tuyển dụng.
Mới tốt nghiệp, nhiều bạn ào ào đi làm. Nhưng tôi nghĩ các bạn lúc này hãy dành thời gian khoảng 6 tháng để review và tập trung nghiên cứu kiến thức 1 cách bài bản. Khi đã vững, bạn đừng ngấn ngại nộp vào các công ty lớn để thử sức mình với áp lực công việc.
Dựa vào 4,5 năm làm việc với PHP, tôi tin rằng chẳng mấy chốc các bạn sẽ thăng tiến khá nhanh với nghề nghiệp của mình. Và luôn nhớ rằng đừng bao giờ chấp nhận với lượng kiến thức mình đang có, hãy không ngừng cập nhật, nghiên cứu để làm giàu vốn liếng của bạn. Khi đó cơ hội tự khắc sẽ đến và bạn 1 bước sẽ leo lên vị trí cao trong ngành nghề.
Các bạn cũng nên cẩn thận 1 điều. Làm công ty lớn thì cơ hội thăng tiến đúng là rất cao. Nhưng đổi lại tình người mỏng hơn giấy. Ít bạn bè, nhiều kẻ thù là 1 sự thật trong môi trường CNTT cạnh tranh hiện nay.
Chúc các bạn thành công và đạt được như mong đợi nhé !!!



ref : http://vovanhai.wordpress.com/2011/08/10/l%E1%BB%B1a-ch%E1%BB%8Dn-nganh-cntt-toi-da-di-l%E1%BA%A7m-d%C6%B0%E1%BB%9Dng-hay-co-qua-nhi%E1%BB%81u-quy%E1%BA%BFt-d%E1%BB%8Bnh-sai-trai/

Lựa chọn ngành CNTT: Tôi đã đi lầm đường hay có quá nhiều quyết định sai trái?