Monthly Archives: November 2015

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


dotNetConfPL 2015

dotNetConfPL 2015

In the previous weekend, on October 31, together with Michal and Pawel we held 3rd edition of dotNetConfPL.

In this year, sessions were very diverse: from ASP.NET vNext, through unit testing, functional programming, Vargant, software architecture, all over to Internet of Things. Great thanks to speakers who did awesome job.

If you missed it you can watch videos on youtube.

Make sure to subscribe to dotNetConfPL youtube channel to do not miss upcoming events.

If you have any feedback and suggestions, please tweet mentioning @dotNetConfPL and #dotNetConfPL, or leave comments below this post.

 


ConnectJS and All Things Open

Last month I had a pleasure to speak at ConnectJS and All Things Open conferences.

ConnectJS

ConnectJS 2015

ConnectJS was not only about JavaScript, but about web development in general. There was even track dedicated for UI Design and User eXperience. The most popular during the conference were talks about ES6/ES2015 and React.

I delivered two sessions:

TDD with TypeScript, AngularJS and Node.js

// video coming soon

Code

Aurelia – the next generation Framework you will love

// video coming soon

Code

I addition to my talks I attended the following sessions:

Everything I Needed to Know, I Learned in Rabbinical School (Yitzchok Willroth) – this session was about sharing knowledge, and cooperation between developers. One thing I noticed, not only at conferences, but also at local meetups in Seattle area is that many people would like to go and speak at the conferences, but “they aren’t doing anything interesting in day-to-day job and they are not expert in anything”. They should have been at this session. Yitzchok was explaining how you can help others, and engage in Open Source. Moreover, he emphasized one, simple truth: every developer has something interesting to share.

Building Web Sites that Work Everywhere (Doris Chen) – very useful overview of web compatibility problems, and recommendation of tools that can help with that, like Autoprefixer. I also liked the quote from Patrick Lauke: “The userAgent property is ever-growing pack of lies”. Doris recommended that we should prefer feature detection over relying on userAgent strings.

Re-evaluating Front-end Performance Best Practices (Ben Vinegar) – the most important lesson learned at this session is the fact that whatever you find in JavaScript books written 2+ years ago might be already obsolete. Moreover, whatever you learn today, might be obsolete tomorrow. This is definitely not a good news for developers, but we need to deal with that and when reading anything on the web – thinking for ourselves.

Video killed the Telephone Star (Ben Klang) – WebRTC is coming to the browser. In this talk Ben demonstrated web app that allows to do a video conference (his implementation of Google Hangouts in Rails).

Lessons learned with TypeScript and ES2015 (Dylan Schiemann) – it was an overview of TypeScript and ES6 based on experience working on Dojo 2 Framework – the second largest application written in TypeScript (after Azure Portal). After this presentation I talked to Dylan, and he showed me another projects his company SitePen is working on: Intern – very flexible and powerful testing framework, and Mayhem – JS Framework written in TypeScript (still under development).

Functional Programming Basics in ES6 (Jeremy Fairbank) – tips&tricks you can do in JavaScript(ES6), but you cannot in OO strongly typed languages like C# or Java.

Lessons from Open Source @ Scale (Christine Abernathy) – Facebook has over 300 repos in github (after this talk I checked how many Microsoft have – almost 300). Christine explained how they help community by delivering Open Source, and how community helps them by contributing to their software.

Introducing Trix (Javan Makhmali, Sam Stephenson) – Javan and Sam created web based text editor, and they open sourced it right after this talk.

The rise of “API” first applications (Travis Tidwell) – this talk was about Micro Services, and modern applications architecture where we have multiple, independent endpoints responsible for one functionality each.

It Was Like That When I Got Here (Paul M. Jones) – it was a great talk about approaching legacy applications, and refactoring techniques. I enjoyed it even despite the fact that Paul was using PHP examples…I actually felt a bit sentimental as PHP was a language that get me started with Web Development when I was back in middle/high school 🙂

All Things Open

All Things Open 2015

All Things Open is one of the largest Open Source conferences in the United States. This year there was over 1700 attendees, and 13 tracks!

I gave a talk about TDD with TypeScript, AngularJS, and Node.js – the same as at ConnectJS.

On a day before the conference there was 5k run/sightseeing event at the evening. It was exactly what I needed before 2 days of seating. Kudos for organizers 🙂

Most of my time during the conference I spent in the room with front-end related sessions. Carina C. Zona explained problems with artificial intelligence and machine learning – Consequences of an Insightful Algorithm. Seth Vargo made an overview of Vargant – product that allows to create and configure universal development environment for every developer in the team. Christian Heilmann was encouraging people to learn JavaScript, ECMAScript 6, and to stop supporting old browsers, such as IE8, that has security vulnerabilities. Yehuda Katz explained how he and other contributors of Ember.js created version 2 without breaking a lot of APIs from version 1, and thus allowing developers for a smooth transition. I also liked the session about Netflix architecture by Andrew Spyker. I wish Andrew had more time to explain details more deeply. The surprising takeaway is that Netflix has 3x of everything. Which means – for every server, service and API they have additional 2 redundant.

The most widely commented session at the conference was keynote by Mark Russinovich. I was pretty surprised that people were surprised by Microsoft doing so much Open Source. For me this is a known fact for a few years now, but it seems that the rest of the World doesn’t know yet, and still see Microsoft as closed-source corporation that want to lock you in their technology.Well…that’s not true anymore. I also had a pleasure to met Christian Heilmann – former Evangelist of Mozilla who joined Microsoft with one mission: kill the Internet Explorer. I really enjoyed his session on ES6, and keynote.

At the speaker dinner I had a pleasure to seat at the table with Andrew Spyker from Netflix, Michael Laing of New York Times, Christine Abernathy from Facebook, and Eric Martindale – entrepreneur from Silicon Valley. We had interesting conversation of the future of Netflix, Internet Television, bitcoin, and digital newspapers. I also learned that New York Times is the only news paper that is profitable in the transition from paper to electronic.

At All Things Open I finally got awesome Ninja Cat stickers:

ThinkPad X1 stickers