I recently finished 97 Things every programmer should know. Well to be completely honest I did skim over a couple of the 97, but all and all this was a very nice compilation of thoughts and topics about software development from very experienced authors. Well worth a read.
A couple of the "97 Things" discussed, stood out more than the others, the following would be the ones I rank as my top 9.
1. The Boy Scout Rule - Robert C. Martin (Uncle Bob)
"You don’t have to make every module perfect before you check it in. You simply have to make it a little bit better than when you checked it out."
To be honest this is not something I have followed throughout my career, and although I certainly try improve code where I can, I never did it per check-in. I do however feel that it is an awesome principle and should be something that is actually part of a code review process. It is all to easy to just say:
"It was like that already"
"that nasty code was there for years, I am not going to touch it."
"It never had any tests"
I work in a corporate environment were applications often last for 4-10 years. If part of the process is always to just make something a little better, everything from deleting unused code to writing a single extra unit test, year after year... it will end up with saving a lot of people a lot of time and money.
2. Beauty Is in Simplicity - Jørn Ølmheim
"The bottom line is that beautiful code is simple code."
Over the years this has become particularly important to me. Earlier in my career, especially when starting somewhere new I would design the crap out of something.
It would be: "Welcome to the school of over-engineering", everything would be abstracted to the nth degree, there would be patterns for the patterns, interfaces on interfaces for the abstractions and a huge amount of code and components catering for every "what if" that ever existed, that only I understood. All of this would lead to very "fancy" code, and me stroking my ego, but at what cost?
Only the minor little one: an utter nightmare to maintain. I have for a while now favored the simplest implementation of almost any solution, even if it is not necessarily the prefect technical implementation. In the world of long living software, maintainability should quite often outweigh other concerns.
3. Step Back and Automate, Automate, Automate - Cay Horstmann
I believe in automating everything possible: builds, deploys, code analysis, unit testing, functional testing, integration testing. None of us actually want to look at that stuff everyday and automation is the only way to get away from that. Can't say automate enough. Automate, Automate, Automate.
4. Continuous Learning - Clint Shank
This is a very important topic, we are in a industry that is constantly growing, changing, shifting and as a programmer you need to be learning and improving yourself wherever you can. It's very easy to get into a comfort zone and just rest on your laurels, I did that for a couple years, and I do regret it now.
Things I am trying to do to keep up and would recommend:
1. Get a Kindle... then buy & read books.
2. Use Google Reader add the popular blogs and website RSS feeds for your specific field as well as a couple outside your field that interest you.
3. Start a blog, by putting my code and thoughts out there, I put in more effort knowing that it's going to visible than if I just wrote the code/article for myself. I also force myself to do 1 - 2 posts a week, ensuring that I must always find new content to learn about.
4. Join an open source community, we generally don't get to do enough "technical" development in our corporate environments.
5. Check Your Code First Before Looking to Blame Others - Allan Kelly
Exactly what it the title says, we all look to put the blame on anything other than our "perfect" code. Everything from the OS to the network guys, the DBAs to the JVM, 3rd party libraries to other teams' interfaces are always blamed first. This often leads to countless hours of wasted effort, or completely avoiding the issue that eventually comes back to bite you in the butt. Most of us can mention moments where we have done this, it's frighteningly common.
6. Hard Work Does Not Pay Off - Olve Maudal
"truth is that by working less, you might achieve more"
"If you are trying to be focused and “productive” for more than 30 hours a week, you
are probably working too hard."
I couldn't agree more with Olve Maudal. A lot of us have been there, we have spent the days, weeks, months at work, but we often don't see the negative sides of what happens when you work 50-70 hours a week. Everything from common logic to motivation and team dynamics go out the window. Even if the short term goals are achieved, quite often the long term repercussions are a lot worse. No one goes back and see's why they have to re-write a system 4 years down the line because the architecture or code is failing. I'd love to know how many of those were because of ludicrous hours and impossible time lines. I can think of at least 2 "re-writes" that I was involved in where you could see it was the result of long hours. People you know to write great code end up hacking solutions at 1am in the morning.
There are times and there always will be, where a couple extra hours are required, just try keep them down to a minimum.
7. Comment Only What the Code Cannot Say - Kevlin Henney
Exactly that... Don't tell another programmer what he can see in the code. Comments stating the business reason or requirement behind a particular complex algorithm is a lot more useful than //loop through the outcomes and add 1.
8. Know Your IDE - Heinz Kabutz
Something a lot of us are guilty of, we spend a couple hours a day in our IDE, learn the shortcuts, learn the features, we probably couldn't begin to calculate the time that would be saved if everyone used their IDE to it's full potential.
9. Learn to Estimate - Giovanni Asproni
I feel this is something that comes with experience, I pride myself on my estimates and over the years I have tried to nurture this "skill". I have a couple points I would like to share on how I get better estimates:
1. Be honest with yourself, make sure you know what you think you know, and openly admit what you don't. This is the quickest way to end up in trouble.
2. Keep track of what you do and how long it, not necessarily for the project manager, but for yourself, see point 1.
3. Don't rely on other peoples perceived skills and timing, see point 1.
Will try get through the rest of 97 Things Every Software Architect Should Know in the next week or so, will be interesting to see how it compares to the programmer one and how much overlaps.
Monday, October 18, 2010
Top 9 of 97 Things every programmer should know
Labels: General Info, Review
Subscribe to: Post Comments (Atom)
I have recently been slacking on content on my blog, between long stressful hours at work and to the wonderful toy that is an iPhone, I have...
I make no claim to be a "computer scientist" or a software "engineer", those titles alone can spark some debate, I regar...
I saw an article (well more of a rant) the other day, by Rob Williams Brain Drain in enterprise Dev . I have to say, I do agree with some o...
This series of posts will be about me getting to grips with JBoss Drools . The reasoning behind it is: SAP bought out my company's curre...
I recently finished 97 Things every programmer should know . Well to be completely honest I did skim over a couple of the 97, but all and al...
I think the same about productivity. more than 30 hours and thinking hard on problems - will indeed fatigue you.ReplyDelete
I think out of the 8 hours we spend each day in work - we hardly spend 40-50% of the time being really really productive and engaging ourselves to the utmost extent we can go.
Great top 9. I like very much the 2nd thing: Beauty Is in Simplicity.ReplyDelete
Here are my picks from "97 Things Every Software Architect Should Know" http://dreamxtream.wordpress.com/2008/10/19/fight-of-the-century-usability-vs-reusability/ReplyDelete
Nice revise, I also get "12 Things Every Programmer Should Know" http://tech.wowkhmer.com/2010/09/12-things-every-programmer-should-know/.ReplyDelete
Excellent guidelines, all of them are crucial and true at the same time. nice!ReplyDelete
I like this "boy scout rule". It is something I try to do always and blogged about as "continuous improvement". If every day you do something advancing a project to completion, no matter how big it is, it will finally crumble.ReplyDelete
I didn't think of programming per se, as I am a mathematician (only hobbyist programmer, my projects are really small), but I see I am not the first to think about it (I already knew, but it is always enlightening :).
Good guidelines quite useful for me.ReplyDelete
IEEE Final Year projects Project Centers in Chennai are consistently sought after. Final Year Students Projects take a shot at them to improve their aptitudes, while specialists like the enjoyment in interfering with innovation. For experts, it's an alternate ball game through and through. Smaller than expected IEEE Final Year project centers ground for all fragments of CSE & IT engineers hoping to assemble. Final Year Projects for CSE It gives you tips and rules that is progressively critical to consider while choosing any final year project point.Delete
Spring Framework has already made serious inroads as an integrated technology stack for building user-facing applications. Spring Framework Corporate TRaining the authors explore the idea of using Java in Big Data platforms.
Specifically, Spring Framework provides various tasks are geared around preparing data for further analysis and visualization. Spring Training in Chennai
The Angular Training covers a wide range of topics including Components, Angular Directives, Angular Services, Pipes, security fundamentals, Routing, and Angular programmability. The new Angular TRaining will lay the foundation you need to specialise in Single Page Application developer. Angular Training
After reading this post I decided to buy the book. It's a very useful reading.ReplyDelete
Estimates estimates estimates - the thought of estimates makes me want to hurl. I think we need a book called '97 things you should know before coming up with an estimate / 97 things you should know before demanding an estimate'ReplyDelete
It would include things like:
1. 99.999% of the time, the deadline is already agreed, so an estimate and the time spent estimating is as worthless as investing Zimbabwe Dollars.
2. Decide on a reasonable unit of estimation - half days are reasonable. 0.1 of an hour down to the nearest 5 minutes is unreasonable.
3. Estimates are ALWAYS wrong. ALWAYS. But that's fine because it's a constant, which means you can plan for it. If someone says 'This task will take x hours', you can plan for the fact that it will probably take x+30% hours. There will always be that live issue that chewed up a day, or that complication with a particular piece of technology that you didn't foresee, or just because you've forgotten that some task will take so long because it's been 6 months or a year since you last looked at it.
4. What is the correct reaction to running over the time specified by an estimate? Frustration - why? You already knew the estimate was wrong. A re-estimation? It will probably also be wrong. Move the deadline out? Only in your dreams. I my opinion, running over an estimate is not the developers problem, it's a planning problem. Do you dump the task that is dragging, or do you dump another task because you're running out of time? The guy working on the issue is most probably not in a position to make that call.
This is call to someone to write this book.
fantastic article man, these tips are simply great for any programmer. by the way I have also blogged my experience as comparator and comparable in java with example . let me know how do you find it.ReplyDelete
This should be no 1...ReplyDelete
2. Beauty Is in Simplicity - Jørn Ølmheim
Great article, one question, what do you use instead google reader?
Thanks for this great post. This is really helpful for me. Also, seeReplyDelete
Visit This Site
I am glad that I found your blog.ReplyDelete
amazing post man Make Google My Homepage NowReplyDelete
amazing post man icloud sign inReplyDelete
amazing post man Spin Rewriter DiscountReplyDelete
amazing post man pubg mobile downloadReplyDelete
Amazing Post Aptoide for HTCReplyDelete
Great online storage freeReplyDelete
Nice Achieve3000 Login PageReplyDelete
Superb icloud loginReplyDelete
This is not at all an easy task even for the professionals let alone a normal user. We prefer this as a last resort and should be done by a professional in engines. You can over-clock the engine and make sure it produces more horsepower and energy making your motorcycle to go much faster. However, the long term consequences include wearing out of engine quickly even with good maintenance.ReplyDelete
Wonderful blog. Thanks for sharing an informative blog. it's a very useful blog.ReplyDelete
Best Paper Products Manufacturer Company | Thoran Paper Products
Looking for essay writing service, but don’t know how to proceed. Get in touch with experts writers of cheap dissertation writing service ukReplyDelete
for best dissertation writing service for college students.
In a simple way, it also termed as the promotional approach for various products or services via the internet or electronic media. data science course syllabusReplyDelete
idn poker apk The overall interest with Texas Holdem poker keeps on developing. The accomplishment of youthful poker players at the World Series of Poker has grabbed the eye of youngsters around the globe.download idn pokerReplyDelete
Aivivu vé máy bay giá rẻReplyDelete
vé máy bay tết
vé máy bay đi Mỹ Vietnam Airline
săn vé máy bay đi Pháp
vé máy bay hàn
giá vé máy bay đi nhật bản
giá vé máy bay từ Hà Nội đi Anh
Wow! Such an amazing and helpful post this is. I really really love it. It's so good and so awesome. I am just amazed. I hope that you continue to do your work like this in the future also.ReplyDelete
data science course in India
Excellent Blog! I would like to thank for the efforts you have made in writing this post. I am hoping the same best work from you in the future as well. I wanted to thank you for this websites! Thanks for sharing. Great websites!ReplyDelete
Artificial Intelligence Course
A portion of these projects are likewise subsidized through extra obligation instruments and additionally value stock contributions.link alternatif domino qqReplyDelete
Wow it is really wonderful and awesome thus it is very much useful for me to understand many concepts and helped me a lot. it is really explainable very well and i got more information from your blog.ReplyDelete
Online Data Science Classes
Selenium Training in Pune
AWS Online Classes
Python Online Classes
Mua vé máy bay tại Aivivu, tham khảoReplyDelete
giá vé máy bay đi Mỹ khứ hồi
lịch bay từ mỹ về việt nam hôm nay
chuyến bay từ anh về việt nam
giá vé máy bay từ pháp về việt nam
Choosing a definitive style for your content is important and it gives your readers a positive experience when they read what you are sharing. Your goal is not only to get your readers to read that one piece of content but you want them to be excited about reading whatever you choose to share over time. A proper business writing style will give others a positive impression of who you are and what you represent. In many respects, your style is your signature. You may choose the same style as other writers but you still put your own twist on it and make it uniquely yours. https://vgoru.org/post/yak-zrobiti-proces-navchannya-bilsh-efektivnimReplyDelete
I think there are lots of more enjoyable instances ahead for individuals who take a lookReplyDelete
at your blog post.
Stop by my web page - 부산오피
Excellent read, I just passed this onto a friend who was doing a little research on that. And he actually bought me lunch as I found it for him smile Therefore let me rephrase that: Thank you for lunch. 룰렛".ReplyDelete
It's really great. Thank you for providing a quality article. There is something you might be interested in. Do you know 룰렛사이트? If you have more questions, please come to my site and check it out!ReplyDelete
I've been troubled for several days with this topic. 바카라사이트, But by chance looking at your post solved my problem! I will leave my blog, so when would you like to visit it?ReplyDelete
A rank checking tool can prove very helpful in keeping you up to date with your rankings on result pages. But with so many tools now available, how do you know which one is best for you? Below are a few aspects you can use to select a rank checker that will be helpful to your business. serp checker toolsReplyDelete
That's a great article! The neatly organized content is good to see. Can I quote a blog and write it on my blog? My blog has a variety of communities including these articles. Would you like to visit me later? 토토사이트추천ReplyDelete
I like the helpful info you provide in your articles. I’ll bookmark your blog and check again here frequently. I’m quite sure I’ll learn plenty of new stuff right here! Good luck for the next. 먹튀검증업체ReplyDelete
A very detailed explanation was provided on this topic. That was a great article for me. I appreciate your efforts on nine of the 97 things that every programmer does to help students. Thanks for sharing with us. Now it's time to get Live Chat Services for more information.ReplyDelete
Thanks for writing this quality informational content. This is a great article for us. It's very helpful for all programmers. Keep sharing more informative content with us. Now it's time to get taxi Manchester Airport for more information.ReplyDelete