career

My notes from The Passionate Programmer

Chad Fowler - The Passionate Programmer

It’s been a while since I read Chad Fowler’s The Passionate Programmer.

Recently I found notes I did during reading it. I thought I would share them with you. It is tl;dr of every one of 53 chapters of the book.

1. Keep on radar bleeding edge technologies vs sunset technologies.
2. Follow job market requirements.
3. Understand business.
4. Be the Worst in the team so you can learn from others.
5. Learn/know different type programming languages (C#, C, python, prolog…).
6. Avoid fear-driven career choice.
7. Keep on radar known tech/platforms vs unknown(to learn).
8. Learn what is under abstraction layer of your programming language.
9. Use different technologies.
10. Log your excitement level over days.
11. Everyday learn something new about tech/tools you are using.
12. Learn how business work.
13. Have/find a mentor.
14. Be a Mentor.
15. Practice (Google Code Jam, Project Euler, Code Katas).
16. Know/learn Software Development Methodologies.
17. Read other’s code (and criticize it).
18. Automate tasks.
19. Do it now!
20. Predict the future – possible requested features (make it easy to implement it).
21. Make daily review (problems, processes to improve).
22. Understand your manager/company goals.
23. Set goals for you current job (long term).
24. Make boring tasks fun!
25. How much are you worth?
26. Share you areas of knowledge in job (implemented modules, deployment process etc.). Make documentation.
27. Measure (by metrics), improve, measure.
28. Work as hard as you can (no fb, twitter etc.).
29. Learn how to fail.
30. Say ‘No’ when you know you cannot do something.
31. Don’t panic.
32. Say It, Do It, Show It.
33. Be aware what others think about you (managers, team mates etc.).
34. Don’t make people afraid of you.
35. Track you decisions and analyze them (diary).
36. In person communication over email/Skype.
37. Have elevator pitch (business benefits of your recent work).
38. Have the mission!
39. Be present on-line (blog, twitter, LinkedIn).
40. Care about your brand (google yourself).
41. Contribute to open source!
42. Be remarkable (do something what will take a week in one day).
43. Propose changes/features to software you are using (mail author).
44. Be up to date with current/new tech.
45. Try to do your job as you are your manager.
46. Path is more important than destination.
47. Create map of your past, current and future career (and what your learn, when you lost time).
48. Try to be alpha geek (or follow some of them).
49. Ask your coworkers for feedback.
50. Avoid monkey traps (do not be too confident in some things, or review them from time to time; know your enemy – play with technology you don’t like).
51. Avoid Waterfall career planning.
52. Be better every day.
53. Try to go independent (e.g. 2 hours/day after work hours) – how much did you earn?

This book helped me to drive my career, and I am sure it will help you with your career!

Have you read this book? What do you think? Maybe you know some other books you would recommend?


My second year at Microsoft

Jakub Jedryszek - Microsoft badge

It feels like it was yesterday when I published My first year at Microsoft. Time is going fast! This is what usually happen when you have a lot of things to do, and you enjoy it. My second year spent at Microsoft has been great! Full of new experiences, challenges, and lessons learned.

Azure Portal

Azure Portal in 2016

For the past 2 years I’ve been working on the Azure Portal. Last 12 months has been very important for entire Portal team. Since December 2, 2015 the new Azure Portal is no longer in preview, and is now an official management interface for Azure. The Old Portal is still available, but we slowly retire its features, and move them one by one to the new Portal. More, and more people start liking the new, revolutionary UI. We are getting requests to Open Source our UI, so that people can use it to build their own management interfaces. If you are interested in that, vote here.

Over last year I helped to improve Portal reliability, which was our last milestone before becoming the official management portal for Azure. It was one of the hardest things I’ve ever worked on, because of the Portal Architecture. We started from 80% reliability in some areas, and our goal was to achieve 99.9%. It was extensive few months of investigation, bug fixing, and optimization. Once we achieved three nines, now we have to stay there. We are getting regressions from time to time, but for most of the time we keep the reliability at the desired level.

Another big area was improving accessibility (keyboard + screen reader support). It was very challenging task because, again, the Azure Portal is nothing like most of web apps. Especially from the design perspective. It’s totally different, non-standard, and has a bunch of features nobody have done before (blades, tiles and journeys). As of today I am amazed how much progress have been done, and what the current state of Portal accessibility is. One thing that amaze me at Microsoft is how the smallest, tiniest, everyday improvements makes a difference in a long run.

Besides reliability and accessibility, I work mostly, on the web controls that are being exposed by our Framework. Partner teams (e.g., Web Apps, Virtual Machines, SQL, etc.) are building Azure features using our Framework and controls. Over last 12 months I created a few controls, added a lot of features to existing ones, fixed a tons of bugs, and made a lot of improvements for date/time controls with help from Matt Johnson (yes, he does not work for our team, but he is one of the best date/time and timezone experts in the World, and it happened that he works for Microsoft so it would be stupid to not ask for his expert advice).

There is also one thing I need to rant about: Safari 9.x (and all earlier versions) does not support Internationalization API (Intl). We are using Intl API for numbers and currency formatting. At the beginning, when we were still in preview, we hoped that Safari will add Intl support soon (in a year or so), but it didn’t happen. We had to use polyfill. Oh…actually I should rant about other issues we had with Safari (like Local Storage does not work in private mode), but you can check caniuse.com or just read an article: Safari is the new IE.

In addition to work on features, I also did a few improvements on our development workflow. From automation scripts, through some helper methods for unit testing, to speeding up local build time by changing MSBuild verbosity (printing to console takes time, in some cases we saved up to 1 minute of build time thanks to this simple trick!).

Speaking, traveling, conferences

NDC London 2016

 

Over the last year I have spoken at a few conferences, Seattle Code Camp, and gave a talk at SeattleJS meetup.

I’ve been speaking mostly about TypeScript, Azure Portal and Aurelia Framework (yes – the last one is totally not related to my day job).

My most recent talk about the Azure Portal architecture received a lot of great feedback. One gentleman told me that it was the best talk of the VSLive Redmond conference, somebody wrote a comment that it was the “Most interesting non-scotthanselman presentation ever”, and one person mentioned it (as “excellent talk”) in Azure Portal user voice (which I found while writing this post and searching for a link to Open Source Portal UI user request for previous section).

Over last year I learned that going to talks at the conferences is the least important thing. The most important is to connect with people from outside of your everyday work environment, share experiences, and networking. The most interesting conversations don’t happen during the presentations, but at the post conference dinner or after party. I really recommend to read chapter 14 of Never Eat Alone before attending a conference!

When I am telling people that I travel around the World to speak at conferences, they think it looks like this:

conferences wolf of wall street

They forgot that most of the time it looks like that:

conferences - travel

Of course there are pros and cons.

Pros:

  • Learning new things (while preparing your talk, and during the conference from others).
  • Meeting new people
  • Visiting places you haven’t been before. On my way to NDC London I paid from my own pocket for flight through Iceland with 34 hours connection flight in Reykjavik. I managed to see the Golden Circle, attend New Year’s Concert at Harpa, and I’ve seen the Northern Lights. I have also seen a little bit of London during the same trip

Cons:

  • You need to work after hours to learn and prepare talk for the conference. You also need to write a good abstract so you talk will be selected. This takes a lot of time!
  • Travelling to conference takes time that you could spend with friends, family, or riding bike. Even if it is domestic flight it takes ~30 mins to get to airport, then ~2 hours on airport, ~2-4h during the flight, ~30 mins to get to the hotel etc. When it is on the other continent then you waste even more time + get jet lag. Oh…and you need to pack day before (~30 mins to 1 hour), and you don’t have your nice 3 monitor setup and comfortable Herman Miller chair for a few days.
  • Sometimes you don’t see anything except airport, aircraft, hotel and conference venue (that was the case when I went to ConnectJS conference in Atlanta and Open Source North in Minneapolis).

Thanks to speaking at conferences, I met a lot of interesting people, and definitely expanded my knowledge. What’s important: I learned the most during one on one conversations in the hallway or at the conferences’ dinners.

In addition to conferences I was a guest at .NET Rocks podcast, where I talked about the Azure Portal. I was also interviewed by David Giard – who I met at Open Source North conference – for his Technology and Friends series. Sara Clayton – who works on Open Source at Microsoft, and who I met at the All Things Open conference – did an interview with me about my Open Source library: voiceCmdr. Jeremy Foster (who I met at SeattleJS meetup) did an interview with me for his CodeChat show (episode coming soon).

Learning

workspace

Over the last year I’ve learned a lot about web development, performance, and accessibility. A lot of things I learned are captured in my last talk about the Azure Portal. I improved my coding skills, debugging skills, and also – mainly thanks to attending conferences – communication skills, which is very important in Software Engineer portfolio.

In my first year review I forgot to mention Microsoft Library, which is one of my favorites benefits at Microsoft. Most books I have read over last 2 years are from MS Library. I reviewed a few of them, and some landed in my favorite books listThe Pragmatic Programmer book said that you should read a technical book every quarter.

Last time, I also didn’t mention that when you are working on something related to Cloud, you have to be on-call once for a while. I am very lucky, because our team is large, and rotation requires everybody to be on-call only 1 week per 6-7 months. I have some friends who are on-call one of every three weeks, or even every other week (sic!). FYI – being on call means:

  • no flexible work schedule
  • no freedom (you need to be able to act on incident right away = you need to be close to your computer and Internet = you don’t go hiking, you don’t go out with friends, you don’t go for a bike ride)
  • I don’t know what can be worse than your phone ringing at 4 am, and some people asking you for help with investigating some problem they cannot solve (hint: these people are not stupid, the problem is hard, your brain usually do not work the best in the middle of the night)

However, there are also a good things in being on-call:

  • you can learn more about the project (when you need to investigate/diagnose something in the area you are not familiar with)
  • you can improve your debugging/investigating/diagnosing skills
  • you can meet new people across the company

The new thing for me, over last 12 months, was conducting interviews. It was very interesting experience. The most important thing I’ve learned was to never skip the coding question. My interview usually contains 3 parts:

  1. chat about candidate previous projects/experience
  2. easy coding question
  3. design question

There will be more details in upcoming blog post, but if you are interviewing people, I really recommend you to check out The Guerrilla Guide to Interviewing (version 3.0) by Joel Spolsky.

Staying fit and healthy

Jakub Jedryszek - run

When you are developer, you need to take care of your health. Sitting 10+ hours is not good for you. Sitting is the new smoking. Additionally it turns out that staying fit and healthy makes you better developer.

I bike, I swim, I run, I hike, I take part in bike rides (like 206 miles Seattle to Portland, or 180 miles Seattle to Vancouver), and I compete in triathlons once for a while.

Staying fit and healthy is not only about exercising. It is actually more about your diet:

exercise and diet chart

However, diet-miracle is not a way to go. Last year I tried to count calories I burn and consume throughout the day, and develop a diet I would be able to sustain for a long term. The trick is to realize that it is not worth to eat some things. E.g., this 500 calories cookie is not worth it. I would rather eat two Symphony bars from Hershey’s. Oh…and you need to wait for results couple of months or so.

It’s great that Microsoft cafeterias now provide calorie counts in the food menu. I am not eating these burgers that are 1400 calories, but other ones that have only 700. Together with Microsoft running trails it provides a great fitness bundle.

There are also other aspects you should take into account to stay healthy.

Oh…and I forgot to mention another awesome Microsoft benefit: Pro Club gym – one of the best gyms on the West Coast, and for sure the best in Seattle area. When I did a tour (right after I joined Microsoft 2 years ago), and the guy who was showing me around told me that they can service my car when I work out I was sure he was joking…he wasn’t.

PRO Club

What next?

Stay tuned!


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.


Soft Skills by John Sonmez

Soft Skills (Jon Sonmez)

Soft Skills: The Software Developer’s Life Manual by Jon Sonmez is a great set of advises about every aspect of programmer’s career and life. Take a look at the book content:

  1. Career
  2. Marketing yourself
  3. Learning
  4. Productivity
  5. Financial
  6. Fitness
  7. Spirit

This book is not a source of truth for everything, but it may give you useful ideas for some particular aspects of your career and life. John is explaining that programmer’s career is not only about coding. I especially like the fact that this book is not only about the work/career oriented things, but it puts work and life together. John explains the importance of living a healthy life (exercise and diet), and how this will help you with your career. He also showcases how to manage your finances throughout your career, and the importance of thinking “long term”.

For more, check reviews on Amazon and GoodReads.

Enjoy!

Have you read this book? What do you think? Share your opinions in comments!


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