developer

The Clean Coder: A Code of Conduct for Professional Programmers

The Clean Coder (Robert C. Martin)

You are probably familiar with Uncle Bob’s classic: Clean Code. While Clean Code is about good engineering practices, and writing good code, The Clean Coder is more about communication aspect of developer’s work. It’s about how to behave professionally, be disciplined, and stick to good coding practices. What’s more, it demonstrates how to avoid common pitfalls in software development process. Such as underestimating time, undergo management pressure or cutting corners (AKA writing bad code).

In Clean Coder, Uncle Bob is explaining by example how to communicate at work. Don’t try to be just a “nice guy”. Be professional and responsible, while being polite. There is nothing worse than giving false promises just to make others happy. However, I have an impression that a lot of people are able to get away with that.

Does below sounds familiar to you?

Clean Coder - rush to complete

Do you remember a situation when you thought: “Damn, I wish I didn’t add this test. I would save a day”? What about situation like: “Damn, I wish I did add that test. It would cost me 1 day, but I would save 2 days I spent fixing the bug this test would guard against”? I’ll let you to deal with the answer.

If you don’t want to read entire book, read first 3 chapters. It is a great summary and advice on common wrong doing of most programmers that is not caused by their lack of proficiency, but rather not sticking to their professionalism and discipline.

Ohh…and if you have never heard about Uncle Bob checkout Every Uncle Bob Robert C Martin Video playlist on youtube, his blog, and SOLID principles. Uncle Bob is like your doctor who is telling you that you should eat healthy and exercise regularly. He has similar advises, but about how you should write code.

The Clean Coder is definitely one of the best books I’ve read about Software Development, and I’m adding it to my favorites.

Are you developer? What are your thoughts? Does some situations described in this book happened for you? Maybe you are business person? What do you think? Leave a comment!


One Hacker Way by Erik Meijer

In 2014, Internets went loud after Erik Meijer’s talk One Hacker Way. I really liked this talk, because it made me think…actually even until today I didn’t figure out everything Erik meant. Unfortunately, most of people didn’t understand this talk.

In 2015, he gave the same talk again, but the rhetoric was way different. It’s more straight forward, and probably more people understood it.

tl;dr This talk is about approach to software engineering, patterns, practices, methodologies, career, and what makes great developer.

Let me know what you think in comments!


The Expert Beginner

The Expert Beginner (Erik Dietrich)

A few months ago I read great article written by Erik Dietrich – How Developers Stop Learning: Rise of the Expert Beginner. After publishing this article, and receiving a lot of positive feedback, Erik has written multiple follow up articles. He also has written a book, which I decided to buy and read: The Expert Beginner ($5 for Kindle Edition!).

This book is a very interesting case study, in which Erik analyzes developer’s growth, and how some people get comfortable with their current knowledge, stop learning, and are not willing to step out of their comfort zone. Erik call this stage: “Expert Beginner”. This leads to stagnation, and no interest to improve. What’s worse it affects their coworkers.

I really recommend you to read “The Expert Beginner”. It’s quick read (68 pages), and may help you not fall into this trap.


NDC London 2016 – Azure Portal and recommended talks

Last month I had a pleasure to speak about the Azure Portal architecture and Speech Recognition in the Browser at NDC London conference.

Azure Portal – the largest SPA in the World

Video

Slides

Speech Recognition in the Browser

video coming soon…

Recommended talks

Must see:

Better single-page apps with ASP.NET MVC 6 – Steve Sanderson – how to improve performance of SPA, by running client-side JavaScript on the server
Case Studies in Terrible Testing – Todd Gardner – how to NOT test software, lessons learned on example of 5 projects
Aurelia: Next-Generation Web Apps – Rob Eisenberg – overview of the modern JavaScript Framework
Play by Play with Rob Conery, Jon Skeet and K. Scott Allen: The C# Q&A, Episode 1 Jon Skeet and Scott Allen are answering 10 StackOverflow questions about C# live on stage
50 Shades of AppSec – Troy Hunt – an overview of variety of security vulnerabilities
Azure for Developers – Scott Hanselman – nice overview of Azure
Making Hacking Child’s Play – Troy Hunt – an overview and showcase of different hacking techniques
Building awesome desktop apps using web technologies – Jonas Follesø – intro to Electron
Everything I know about computers, I learned from the movies – Mark Rendle – funny, entertaining talk about programming in the movies

Worth to see:
Under the hood of C# 6.0 – Bart De Smet – very informative deep dive into C# 6 features
What does an “Open Source Microsoft Web Platform look like?” – Scott Hanselman – why Microsoft is doing Open Source
Project Rider – Hadi Hariri – new C# IDE from JetBrains
Saying “Goodbye” to DNX and “Hello!” to the .NET Core CLI – Damian Edwards & David Fowler – instead of cross-platform CLI for ASP.NET vNext we will have cross-platform CLI for entire .NET
AngularJS & ASP.NET MVC Playing Nice – Miguel Castro – intro to developing apps with ASP.NET MVC and AngularJS
A brief history of ASP.NET: From 1.0 to 5.0 – Damian Edwards and David Fowler
ASP.NET 5 on Docker – Mark Rendle
Developing Killer Apple Watch Applications – Wei-Meng Lee – overview of developing apps for Apple Watch
Continuous Delivery of Mobile Apps – Karl Krukow
C# Language Internals – Bart De Smet – how C# language works on the IL level
Legal pitfalls for developers – Kuan Hon – law for developers in nutshell
Debugging tools for the Web – Lenard Gunda – Chrome Dev tools and Fiddler overview of features
What’s new in Security in ASP.NET 5 and MVC 6 – Dominick Baier – Overview of auth with ASP.NET vNext

Summary

NDC is a great conference! I strongly recommend it to all developers. You can learn from the best industry experts, have interesting conversations with fellow developers and make new connections.

There is even unofficial NDC Song by Dylan Beattie:


How to become a better programmer/developer?

developer

From time to time I receive emails with questions “How to become better/awesome developer?”, “Should I go to college?”, “what’s the secret formula to become ultimate programmer?”. Instead of answering the same questions over, and over again – providing only partial response each time – I decided to write this blog post.

Should I go to college?

College lecture

It’s a very hard question. Especially from perspective of person who went to 3 Universities (and graduated from all of them). Thus, instead of telling you whether you should or should not go to College, I will tell you what are the benefits of going to College.

First, and foremost – the opportunity to connect with other people. Better the school is – better connections you can make. This is the real value of going to Harvard or Stanford instead of Community College. Not outstanding professors who owns secret formula that they are sharing only with their students. Of course professors at top Universities are usually better than at non-top Universities, but they do not have recipe to teach you something without your own initiative. Did you know that Stanford, and MIT publish some of their classes online, for FREE? Why you do not just study these classes instead going to college? You can, but this is like watching the moon landing from home instead of being in the space craft. This is also the reason why top schools accept only ~2% of candidates. They want to have only the smartest people to hangout together, and then have successful careers. This makes school prestigious.

The second benefit is being forced to learn things that have steep learning curve, are not very fun at the beginning, but are definitely worth to know while being developer. Most of them are actually very exciting when you connect all pieces together.

Information, knowledge, wisdom

Check out my other blog post: 10 things you should learn at University.

When you will have opportunity to choose classes to attend – first choose professors, then subjects. From my experience – when I wasn’t interested in some topic, but professor was good – I liked the class, and I learned a lot. On the other hand – when I was very interested in some topic, but professor wasn’t great – I always regretted, because I probably could have learnt more by myself.

Before making your decision, get familiar with opinion of people who recommend you to go to College (e.g., Joel Spolsky), or with those who definitely tells you to do not (e.g., DHH). You should also take into consideration path of those who went to College, and drop (e.g., Bill Gates, Steve Jobs, Mark Zuckerberg). Be aware that educational system has its issues that are amazingly explained by Sir Ken Robinson in the most watched TED talk ever Do schools kill creativity?, and Peter Thiel in one of interviews. Remember that university education is not life insurance policy. It may work exactly opposite.

I do not remember who said that, but I agree:

The best programmers learnt Computer Science at School, and programming by themselves.

What language should I learn?

Programming Languages

Most of experienced programmers will tell you: “whichever is your favorite, because you can do cool stuff in C#, but also in Ada, e.g., by writing Software for Boeing 787”. And they are right! But I feel sorry for those beginners who will try to start with Ada, because it is very likely that at the time when they will be getting their first program to compile, those who had chosen C# would already have full CRUD application with Database deployed on Azure.

My answer for this question is: learn C# and JavaScript.

Why C#? “C# is a better Java”, and those two (C# and Java) are currently the most popular compiled programming languages. Thus, there are a lot of code samples, tutorials, and community support.

Why JavaScript? Because it is the most popular programming language that allows you to write programs for the most popular platform: web browser.

Extra credit: learn also C/C++ to learn pointers, and how memory allocation works. I would even recommend you to try to write some assembly: to understand how variables are stored in the processor registers, and memory. Then spend 7 weeks with this book: Seven languages in seven weeks. Hint: after you learn first programming language, learning each next will be getting easier. There is also a great, GREAT book that will help you to understand how computers work: The Elements of Computing Systems.

You may hear from more experienced programmers that you shouldn’t try just learn another language, but to build something. Unfortunately, the difference between you and them is usually number of the languages you both know. You: 1 or 2, them: more than 5. Because of that, they are able to pick up language basics in one night, and start building something right a way. They already know how to use common programming constructs – such as loops, functions, classes – and how to use them efficiently. For you: it would be much harder.

It’s good to be proficient in one language, and know how to use a few other. I think it was Albert Einstein who said:

Know everything about something, and something about everything.

How to get a job when I do not have any industry experience?

first interview

Create something. Whatever. Really! That’s the most popular advice from experienced programmers. While it’s true, the problem is that it is much easier to say and understand, when you already have done that. For somebody who is really entering the market for the first time – it is not that obvious. So, here, I will tell you what to do: Create a website that will allow you to browse, add, edit and delete books. Then add possibility to login, and roles for admins (who can do everything) and standard users (who can only browse books). Once you have this, create a mobile app that will allow you to browse these books like the website, and later on, also edit/delete when you are logged in as admin. You can get books from your website by creating API that will return data in JSON format.

What technology to use? You can do it in ASP.NET MVC using MSSQL Database (with Entity Framework). You can also use Node.js with Express Framework, and MongoDB database. On top of that you can use some SPA Framework like AngularJS, ReactJS, or Aurelia, to make your app more cool. For mobile app – Windows Phone is the easiest for beginner. You can also try iOS or Android if you want to. The best move would be of course to implement it for all 3 platforms. You can create native apps in C#, Objective-C/Swift, and Java, or you can use Xamarin (C#) or Apache Cordova (HTML/CSS/JavaScript).

BTW: You can learn all technologies mentioned above at Pluralsight. I really recommend you to get an account there. You can check popular courses list as a tip what it currently hot and worth to learn.

When your app is ready, publish it on github, and deploy to Azure or AWS, or Google Cloud, or to all of these platforms. Use FREE trials if you do not want to pay, or even better – figure out how to do not spend too much money when using Cloud.

Are you done? I hope you didn’t do it exactly how I said, or you did multiple versions of slightly different applications using different tools. Great! Now, you can show it to your future employer, and tell him that you are already capable to deliver software from your first day at work. You can put it in your resume, in ‘projects’ section, and describe it: “I created a website for book collection management with user authentication, and authorization. Additionally I created companion mobile apps for 3 most popular mobile platforms (iOS, Android and Windows Phone) that communicates with database through RESTful API”. If you will have thing, when you graduate from Collage, you will already beat 95% of other students, and – I am assuring you – this will give you your first job for 99%. From then – you will figure things out!

If you want to work for some of the top, tech companies like Microsoft, Google, or Facebook, I recommend you to learn a lot about algorithms. Take as many algorithms classes as possible at school, read books (1, 2, 3), and practice, practice, practice. These companies don’t care whether you can program in Java, even if you are applying for Java Programmer position. What they care about is whether you are smart, and can get things done. I really recommend to check out Sean Lee’s talk How to Get a Job at the Big 4 – Amazon, Facebook, Google & Microsoft – it’s not only about getting job at particular companies, but it’s also a great career advice.

How can I improve my coding skills?

coding

Write code. A lot! Really. Write code everyday. You can create some simple applications, like todo list, or shopping list app, or personal finances calculator. I know all of these exists, but you are going to learn by reinventing the wheel. If you want to create something more complex – go for it! Look at this women who built 180 websites in 180 days. The good way to practice programming is to compete in programming contests.

Read books to learn from more experienced programmers, and to discover what we know about programming today. If you want some reading recommendations check list of my favorite books, or all books I have read.

Check out podcast Be a better Developer in 6 months by Scott Hanselman, and article by Peter Norvig (Director of Research at Google) – Teach Yourself Programming in Ten Years.

You can also take a look at Google’s Technical Development Guide – recommendations and resources that will help you to become developer from Google.

Get Involved!

get involved

There is an amazing, free Pluralsight production by Scott Hanselman and Rob ConneryGet Involved! Check this out. Then start a blog, create twitter and github accounts, subscribe to some podcasts (e.g., Hanselminutes, .NET Rocks, This Developer’s life, StackOverflow podcast), and go to some conference for developers, local meetup, or Code Camp. Pro tip: when you want to learn something – submit proposal for local meetup, student Computer Science group, or conference about the topic that you are interested in, and would like to dive in. This will give you motivation to learn.

Remember about soft skills

soft skills

What many developers underestimate is the value of soft skills. Please read Dale Carnegie’s How to win Friends and influence people, and Chad Fowler’s The Passionate Programmer. Maybe at the very beginning of your career it doesn’t matter that much, but at some point you will notice how important is communication, and ability to interact with people.

Summary

I know you would like to be an awesome coder tomorrow, but this takes time. Be patient, work hard, and after some time you will realize that you are a good programmer. However, remember to maintain and improve your skills everyday, like athletes do with everyday training.

Good luck!

Wolf of Wall Street