A long time Mac/Linux user after several months at Microsoft
January 15th, 2017
It’s been 7 months since I began my internship at Microsoft Research India. While my research experience has been great, moving to Windows 10 and programming in Visual Studio and PowerShell has been a challenging shift. In addition, my university mostly functioned on Google for Work and Slack, so the shift to Office and Skype was a source of frustration as well. Since then, my viewpoint of Windows has changed considerably. I still think that Mac OS has a better user experience and that both Mac and Linux are better suited to development, however it’s now clear to me that there are some extremely cool ideas inside this camp and certain things are actually better here. With some efforts to overcome the learning curve, it’s possible to have a generally great experience working on Windows.
During college, I mostly worked on my trusty MacBook Pro while switching to Ubuntu VMs for certain tasks. While I knew that this was coming, I still had a knee jerk reaction on my first day in front my new workstation. I was seriously considering ignoring my assigned workstation except for things that I absolutely could not do on my personal system. No apt-get or brew or port! Adobe Acrobat instead of Preview! No simple
git clone && make install!
Honestly, the only reason I even began using my workstation was because personal machines were on a different network from the printers. Also, the multiple monitors were new to me and seemed cool. My adviser and I discussed my project for about an hour and I set out to start a literature survey. To keep track of papers and thoughts, I created a OneNote workbook and a OneDrive for Business folder. So far pretty simple, just create the items and share with your team members using their official email ids. I got tired of Edge after an hour and installed Chrome, mostly so that I can access my old passwords and extensions.
The default behavior for reading PDFs is to open them in Edge. This works fine until you need to highlight text or do any thing more than read or print it, so I ended up installing the corporate version of Adobe Reader. In my opinion, Mac Preview provides a much better experience than Adobe does. Firstly, Preview opens any image/document except the most esoteric formats and it has really nice looking annotations. On Windows, you use a different app for viewing photos and PDFs and there isn’t a native way to markup PDFs. Acrobat does a decent job of handling annotations but the results look ugly. It also has serious feature creep issues.
Days 2 - 7
The rest of the week disappeared in just reading papers. The most disappointing tools to use were Outlook and Skype. Firstly, there was some bug with the Android version of Outlook that prevented it from working with @microsoft.com ids. The IT guy actually told me to configure the Gmail app with Microsoft’s Exchange server. While being slightly funny, this setup was quite a painful experience because many official email notifications (including the daily snack menu :P) are encrypted and Gmail cannot decrypt them. So while I could get mails from my advisor, I often missed mails about talks and team outings. I also couldn’t use some features like the calendar and the event RSVP feature. This bug got fixed in a few weeks though. The real Outlook app was pretty good except for a few pain points. The search feature was pretty buggy and crude. I’m too addicted to searching for a couple of words and pulling in ancient emails and attachments on Gmail. Another pain was using the dog food version of Outlook. Since there isn’t a way to do an incremental or silent update on Android, the app makes you download the latest APK every few days. Sometimes, my credentials would be lost in an update and I wouldn’t receive push notifications until I reentered my id and password. The interesting thing is that the app doesn’t prompt you to do so after a re-install and I realised this after a few days of not receiving notifications.
Skype is easily the worst part of my day to day life. For a long time, Skype was just a way of having a video chat with someone. Since being acquired by Microsoft, it seems to have become a general chat application. The way it organises conversations makes sense but it’s so different from WhatsApp, Facebook Messenger and Slack that it was initially confusing. Also, the file upload was incredibly buggy and my team stopped using it after a couple of days. The Mac and iPad versions of the app actually suck beyond redemption. The official Mac Skype for Business doesn’t actually let you participate in video calls which I consider ridiculous. There is another app for Skype Meetings for this but I couldn’t get it to work. The iPad version is a little weird, because you don’t initiate a video call in the conventional sense, you create a meeting and the system calls you back. Now I just use the Android app for taking meetings at home. That said, there are some very cool ideas here. Firstly, on the phone, you can join in on a Skype call without an internet connection. It’s possible for team members to add you with your phone number and you’ll actually get to join a cellular conference call. Very handy if someone gets stuck in Bangalore traffic or loses internet connectivity. If the meeting was scheduled in advance, then you can even note down a phone number which is assigned to the meeting and just call it when it when the time comes. Another cool feature is to specify rooms for meetings. Once the meeting is created, the room is blocked for the duration of the event. This is light years better than the system back at college.
Word and the rest of Office was a pretty good experience. I don’t really write much though and when I do, it’s for a paper which is on Latex anyway. I particularly like the ‘Tell me what you want to do’ feature which really helps with finding buttons and features. The only weird part is the collaborative editing which is closer to Git than Google Docs in it’s model. True real time collaborative editing would be nice. Sharepoint also seems to be really powerful, although I haven’t used it much. A large number of internal sites run off Sharepoint and I have to say it’s pretty impressive.
A bigger challenge was getting used to Visual Studio. I never really used IDEs much, except for some dabbling with Android Studio. The most challenging part of the whole deal was adding external libraries and figuring how to use Microsoft’s version control system. I really liked the ‘Peek definition’, ‘Show definition’ and ‘Code map’ features. There are ways of achieving the same on Linux using
doxygen but having these features in the right click menu really makes life easier for new comers. Linux command line tools are really powerful and can be chained in interesting ways but, the possibilities don’t suggest themselves in the same way features in VS do.
Powershell (PS) had a steep learning curve for me. The inability to apt-get or grep was a huge pain. I did eventually learn the tricks to getting a smooth experience however. One nice thing about Windows is that you can right click on the File menu in Explorer and open the current folder in PS. You can also open the current PS directory in Explorer by using
ii command. Pretty neat! Git, wget and other common commands like ls and mv work almost identically with bash which is a blessing. One really nice idea in PS is that everything is an object so they can have state and methods. In bash, everything is either a variable with a primitive datatype or a character stream. PS commands actually reference into a .NET virtual machine and the associated libraries which must be pretty powerful when doing advanced scripting. A couple of months later, Microsoft released the Linux subsystem for Windows which lets you run bash directly inside Windows along with all your favourite command line tools. The only drawback is that GPU and rendering pipeline access is limited so it’s not possible to use Matplotlib or OpenGL. This feature is still pretty powerful though and people can actually run an entire MEAN stack off this subsystem. I actually use it for compiling and running non graphical C++ code using cmake and gcc.
One aspect that continues to be painful is installing libraries. Windows software, even libraries, continue to depend on exe installers. While this can be more convenient because it saves you from editing your bash profile, it can be cumbersome when there are lots of dependencies. Installing TensorFlow on a windows machine takes 15 minutes with Pip but CNTK takes at least a couple of hours, due to it’s large number of exe based dependencies.
A few months into my internship, I had to run some code on a laptop. At this point, a particular Windows batch file would give incorrect results. After some debugging, I realised that the root cause was that on my original system, I had enabled file extensions as a part of the filename. On the laptop this feature was disabled, so a file such as foo.txt is actually just foo. These are the kind of issues that simply do not exist by design on a nix platform.
Some user interface aspects are actually better on Windows, such as lock screen controls for playing music and Windows Spotlight, which puts a different beautiful wallpaper on my lock screen everyday.