Easy path to Windows 10 development

One of the best features of Windows 10 is the Universal Windows Platform which allows apps to be developed for different Windows 10 device families and provide consistent user experience across any Windows 10 device.

From What’s a Universal Windows App?, a Universal Windows App lets you

  • target device families, not the OS
  • use a common API surface across Windows device families
  • give a tailored experience for a particular device family
  • submit apps to a single store for all Windows devices
  • make the app UI adaptive to the device

If this sounds exciting to you, head over to Microsoft Virtual Academy (MVA), and sign in with your Microsoft account and get started with the course – A Developer’s Guide to Windows 10.

A little about MVA

Courses in MVA usually have the following structure:

  • List of topics

    • Intro Topic

      • Intro video presentation
      • Intro slide
      • Assessment
    • Topic 2

      • Video
      • Slide
      • Assessment

and so on.

Completing each step of a topic awards you with some points as defined by the course instructor. At every step, the completion progress is noted and is displayed, usually, on the top of the course page. Course progress can also be found on your dashboard along with few other useful things like your global MVA ranking, your accumulated points, etc.

The slide section is optional and may be used in some courses to give a quick summary of the topic. I found slides to be useful in retaining some knowledge of the learning before taking the course assessment that follows.

A glimpse into my cluttered mind

  • Oh, I think it has been about 30 minutes since I last read /r/programming. Let me read it again.
  • Ok, let me read this Things to Know When Making a Web Application in 2015 on reddit before I forget about it and save it into my reddit saved links.
  • I have seen this browserify thing about 220 times by now. I need to investigate it right away. Oh wait! It says something about require modules in browser. Hey! Didn’t I already tell myself to grok requirejs thoroughly? Yes, let me look at that now. Right this moment.
  • Oh look! This seems to a great blog post about requirejs. I will need to keep coming back to this blog. Oh wait! I remember this blog about 5 jquery tips for intermediates. Shit I must already be a having a list of blogs I like, right? Where the hell did I put that down last time?
  • Let me bookmark this link in browser. Shit! I keep myself reminding myself to maintain a list of blogs I really like. Oh wait! I know I had stored that in, I think, in a text file in Dropbox. Crap! I can’t find it. Wait, was that in a draft in gmail? I guess so. I will look for it later.
  • Wow, Old Reader still works! I love this app. Is there an app for Windows Phone? Let me check. Oh, there are three. I probably need to look into making one myself.
  • I need to make a website/app/store-app for Old Reader. The current ones are okay I guess, but I have a raging urge to make an app. Oh wait! I know I won’t. Mostly.
  • I must have a local homepage that opens when I login to my laptop. This page must contain a dashboard of things I need to do or "things on my mind" that I need to do sooner or later. Oh wait! Should this be a mobile app? or a public web page? Whichever it is going to be, I should probably let my wife check up on me via this app. So it must be a cross platform app, right? Oh, wait! It should not only have my "things of my mind", but also these kinds of thoughts that are going through my mind right this second.
  • I need to look for an app that will let me write functional specs for an app/website.
  • Where should I jot down my latest set of unrelated thoughts? blogspot? wordpress? tumblr?
  • Just put up a blog post somewhere or start a new blog about how I mind spirals down into a series of unending thoughts that eventually put me to sleep.
  • Now that I think of it, I need to organize my browser bookmarks. Haven’t I thought about this at least 100 times. Wait, I also need to get bookmarks from other browsers and Oh wait! I need to get reddit saved links as well.

I was a developer once

Mediocre developers want to know everything and can be paralyzed by their lack of knowledge. It becomes an excuse. A good developer just wants to develop things and knows enough about his tools to ask intelligent questions to problems as they arise. – AlexFromOmaha

This was a comment on reddit on the question, How do you deal with the overwhelming complexity in the field of programming:

This right here is golden advice. I can attest to the fact that wanting to learn everything will ruin you. I am a living example. It has ruined me over the past 5 years. I used to blame reddit for turning out like this.

What has reddit got to do with this? Giving me a window to a variety of programming concepts, programming celebrities, next-best-thing articles, why OCaml, why Erlang is the next Java, how Python is best language to learn and et cetera. Truth to be told, I was fascinated to learn all these things from the very best people in this field, Paul Graham, Steve Yegge, Slava, dons, gnuvince, psnively, cgibbard, rwmjones, spez, mfp, zedshaw and many others. This was possible as I joined reddit around the end of 2006. I filled my head with all these discussions. Every time a language was hyped, I used to learn the language for about a week or two and quit. I went through this phase for almost a period of two and a half years, during which, I tried Python, Ruby, Factor, Erlang and OCaml. I stuck with OCaml for a long time as it somehow appealed to me. I declared it as my favorite language and I even bought a domain with its name in the URL, to write about experiences with OCaml. It would have been fantastic if I continued to stick with it. Probably I would have been in an awesome place in life now. After some time I gave up as I had trouble understanding some concepts. Instead of persisting, which used to be my trait, I got swayed by some comments by people (real experts, not mediocre hacks like me) about the language, who essentially said learning a language without a supporting tool-chain is a complete waste of time, at least for beginners. I felt that is correct. I blamed the language for being so archaic and unsupportive. I did not, at the least, learn the core part of the language. I quit it finally.

Time was running out. Did I tell you that I was a C# developer outside? A mediocre one at that. I could not hold a job as a result for longer times. Then the depression in US hit me like anything. I couldn’t get a job easily. I never tried or sought to improve my core language (C#) skills. I was so jaded with all the information I could find on reddit that, even though I was unemployed and in a shitty situation, I still did not learn my lesson. I could have quit reddit/or the want for information, but I didn’t. So I suffered a great deal.

It was so bad that I had no finances left and had to return to my country, where I joined a startup to work as a production support guy. Due to all the exposure I got from reddit, I never had trouble understanding any concept that was discussed by the people in the development team. I never had trouble understanding even architectural terms or design patterns or new tech when big heads in company discussed ideas. I even presented couple of new technologies and frameworks to a couple of teams. I could talk about key-value stores, functional programming, NoSQL and what not. I was the only misfit in my team. I was too qualified. But the biggest screw up was my inability to stick to my core language. Every time I tried to do a mini project, I was overwhelmed. Every single time. My brain was not ready to start learning from data types all over again. I could not simply sit and start a project.

2 years passed. I left the startup as I was severely burnt out. I tried searching for a (C#/MVC) development role and it got only tougher as each day passed on. Unable to get a job and having some free time on hands, I again started to fall into the trap of wanting to try new things. I started learning Python for a job that had Python as one of its main technologies. Things started falling apart, again. I stopped half way through ZedShaw’s tutorial. This happened twice consecutively. It got depressing most of the time due my inability to complete things. One day I decided to put an end to this vicious cycle. I realized being in a trap and created a discipline for myself. I started to create a simple client/server chat system in C#. Remember I used to blame reddit? It turns out that I have ADHD, which continued into my adulthood, and dysthymia. Now I am not saying I realized that I had ADHD only recently. I knew that I had this, but never acknowledged that it has caused me to ignore my regular path of hard work and learning. But I learnt about my dysthymia only recently.

Due to all this, my ability to learn has severely slowed down, so much so that, to come up with a logic for something as simple as involving a palindrome or an algorithmic part, it hurt my head. I get sleepy sometimes or a headache sometimes just by thinking hard about a problem. This is the price I paid for not learning my core language fully first. You might not imagine how much I wish I had finished that part of my initial learning.

But this time, I persisted. I continued to work on chat project no matter what happened. I stopped working on it since a month and looked at other things, but I know that it will not be ignored. I am using bitbucket, so that it will never be completely abandoned. This is not to say I have overcome all my distraction. I still have triggers in the form of depression, anxiety or anger. I have only learned to control my urges and let the feelings pass, so as not to be overwhelmed by the impulse to do something. I am getting better at it. There is a recent instance, where I couldn’t control my impulse. I gave in to the impulse. I started learning Erlang once again. Shit. But this time, as I know it would impair my learning of core language, I created a blog where I would write about it on consecutive or alternate Sundays.

I know I have written too much about it, but I felt the need to do so. This was because in one of my totally neurotic days four weeks ago, I gave in and started learning Flask and within two days, I modified the flaskr application to do some extra functionality. After 4 days I hit a wall. Obvious wasn’t it? With no Python grounding, I wasn’t about to take off anywhere.

As soon as I read this comment on reddit, it felt like a tight slap to me. It reminded me what needed to be said to myself. Yes, I am mediocre. I helped myself turn into one. I now no longer dream of becoming a prolific programmer who is outspoken about some language decision or how to hire a programmer or why so-and-so language sucks, but I just want to be a good programmer some day. Let it take years. This comment injected some much needed sense into me. I will continue to work on my chat program, but to satisfy my urges, I will learn Erlang slowly and systematically. Thank you AlexFromOmaha.

I know this post is too haphazard, but you can guess by now why it would be so. I wish this would be a lesson at universities to people who don’t finish learning their core language.

Interview Experience with an MRC (oops, MNC!)

Though I worked as a developer in the earlier stages of my career, I deviated to a production support role due to some circumstances. I enjoyed and welcomed this change as it taught me a lot of new things. Yet I always longed to come back to a development role. To set this thought into motion, I started looking for development jobs.

About two months ago, I received a call from a recruiter at a major MNC for a software developer position. It is one of the biggest IT services and consulting company in India. I was quite excited about receiving the call as I was looking to shift into a development role. At this point, I knew that this interview would be an outright humiliation as I still had lots of gaps in my knowledge which was relevant to a regular development role.

The very first phase of the interview was a technical walk-in. I went to the campus at scheduled time. The campus was not a great looking one, but was not bad either. I walked past a group of buildings and I was led into one of them. I sat in a cubicle where I was told to wait for a phone call. There were other people like me who were either waiting for their call or already engaged in a tele conversation with some remote person. While I waited for my turn, I picked up the kind of questions these people around me were being asked. In fact, the person in my next cubicle spoke so loud that I became almost sure that I would not fare badly. After an hour, it was my turn. Since it was lunch time, my interviewer looked to wrap the interview up quickly. His rush was not slowed down at all owing to me not being able to convince him that I would be suited as an intermediate level developer. The thing that surprised me was that the interview was not really technical enough for a developer role. I was asked questions more on a design level and not the technical nuances. Either way I would have been a disappointment. But I favored being grilled technically. The interview lasted for about 20 minutes when my interviewer ended the call. I walked out feeling pretty satisfied as I received my due humiliation.

I neither received any communication from the recruiter nor did I expect any. After three days, I was told that I was selected for the next phase. I could not believe it. I told myself that this might be a role where the responsibilities would be a mix of development and support, so they thought I would fit.

The recruiter called me again after three days and informed me that the second phase would be a managerial and telephonic. On the day of the second phase, I got interviewed by the concerned managerial figure. He seemed to be a smarter person, who had a good high level knowledge and understanding of development projects and architecture. Quickly he understood that I spent more time lately on support projects and questioned me relevantly. He was visibly disappointed as he wished to talk to a person with more relevant experience. The call ended after 20, 25 minutes. I thought I would not receive any further calls.

I was wrong. A week after the second phase, the recruiter told me that I will be having another managerial round. What? Another managerial round? For a position that was supposed to be a lot technical in nature, it was turning out to be a total nightmare. If it was for a developer role, I should not have received any call after the first round debacle. I realized that they were not really keen in hiring a good developer, but rather looking to fill a position at any cost. Who knows how many months I would be on bench (no work, but salaried time), if I really did get hired after all?

Having all these thoughts, I decided to play along. This was part of the conversation with the second managerial figure:

Why are you coming out of this company so soon?
I was not comfortable with my project mapping since it was related to X technologies.

What if in my MRC I assign you to a project of X technology? Will you leave my MRC also?
Yes I would.

So you are adamant about technology?
I wouldn’t call it adamant. I would call it passion, since I am really interested to work in technology Y. I am planning to complete couple of Y certifications also by the end of the year.

But you have to be flexible to work on any technology you are assigned. Long time ago when I worked in a Microsoft project, I was given all heap dumps and log files for analysis. I did that.
Yes it is true that one needs to flexible in the field of IT, but now, I am not really interested in working in any technology that is given to me. I want to work in technology Y.

How many lines of code have you written on days you have written code?
Uhm.. About a 100 or so.

100 lines only? Here in my MRC, 220 lines of code is a standard.
So does more the number of lines of code mean more skill?

No, no, but in my MRC, we have it as a standard measure.
Oh! Okay.

You said you worked on bug fixing? Tell me any bug fixing metrics?
Uhm. I am sorry, I don’t know what bug fixing metrics are.

Ok, tell me what rejection index is?
I don’t know. I have never heard of rejection index.

Ok do you know of buzzword, buzzword, ..blah..blah..?
No, I am sorry, I never heard any of them.

At this point the conversation was over. The interviewer was quite pissed off, but kept his cool.

I was pretty sure at this point that the recruiter would not dare to call me again. They waited for a week and gave me a call. I expected to hear that my profile was not being considered at this time and such. To my complete surprise, the recruiter asked how much salary I am expecting and which place I would prefer. This either meant I will be receiving an offer letter sooner or later from this company or there would be further managerial rounds. I lost whatever little respect I had for this company.

How would a person in their right mind accept an offer like this? While I am pretty sure that there are thousands of people being recruited in this way, I never wanted to go to such an extent where I feel that the organization is doing me a favor by letting me in. This does not lead a person to meaningful work. I acknowledge that in the end, not all jobs turn out to be total crap jobs, but I could never enjoy this process which actively seeks to undermine my intelligence and ability. This does not promise a person of any kind of job satisfaction.

Some questions I wish some Sr. Dev or a Lead Dev asked me:

  1. What kind of projects have your worked on?
  2. Why was a particular technology was chosen for a particular project?
  3. Explain OOP concepts with an example.
  4. What design patterns have you implemented?
  5. Have you worked on MVC?
  6. Is MVC a better alternative?
  7. How can the performance of a stored procedure improved?
  8. How have you used JQuery in your projects?

In the end, I felt that interviews with various managerial figures was an attempt to shoehorn me into some ‘software analyst’ role. Having had this bad experience, I decided to avoid MRCs altogether, in the hope for a better prospect.

MRC = Mass Recruiting Company