Recently, I switched companies and find myself having to learn a whole new way of developing. I had spent the last 6 years at a complete Windows/.NET shop. Everything was C#, Windows servers, SQL Server dbs, Visual Studio, TFS, the Windows/.NET life. It was a very homogeneous architecture, and all the developers were C# experts.
At my new company, even though I was recruited for my C#/.NET expertise, I found myself being handed a Mac for my development machine and a whole different world. They use mainly linux servers. I found out that .NET is really only used for a few .NET core api’s running on linux(arrgghh). They have a complete mismatch of platforms/languages/architectures. It is a lot of php, node js, python, and go on the backend, and almost every frontend you can think of(angular, django/python, vue, react, straight html, etc.). They are completely AWS cloud. All of the developers live in the bash terminal window with some sort of code editor(vs code, sublime, atom, etc.) instead of a full blown ide.
My new development team could not believe that anyone would not develop on a mac. They have this belief that full blown ide’s are overly complex and a terminal window, code editor, and console print statements are the best way to debug. Not to be an elitist programmer, this seems fine for simple stuff, but a complex multithreaded application needs more than console log statements to debug.
Well, this was quite a change for me, but I had made the switch because I was getting bored, wanted to learn new things, and see what an enterprise web shop with a bunch of youngsters was like. Little did I know how much learning I would be doing. May be it is a mid life crisis, who knows. I did grow a beard for the first time and get a tattoo. I am beginning to feel cool and hip again.
Now to the point of the article, my observations, on the pros/cons of these 2 very different environments and architectures.
The Mac as a development machine. I like it. I find myself hating to admit it but a mac is a pretty sweet machine. I do have Parallels and a Windows 10 vm for those days when I want to do some hard core C# stuff, but I find myself living more and more on the mac in a terminal window and vs code.
Speaking of the terminal window. This is kind of full circle for me. I started on a vax/vms terminal and some unix boxes back in the early nineties. I like the intimate nature of the terminal window and being closer to the os. That said I am still a fan of nice tools that handle lower level stuff for you. The geek in me likes the terminal window. The proficient experienced developer in me likes a good set of tools to handle lower level stuff.
Code editors versus a full blown ide. For node, python, php, and simplier things I am starting to like vs code. I have settled on it over sublime and atom. Maybe it is my visual studio roots but I do like it better. I can do some basic debugging in it, and it integrates well with git. But nothing beats a full blown ide for serious development. In my opinion, the full Visual Studio experience is hard to beat. Its tool set is unmatched. I find most of the young developers I work with do not like its steep learning curve. They find it to complicated and do not want to invest the time to become proficient with it. I think this is a little short sited, but most of what they are doing are projects that do not require visual studio. Creating an api that queries a db and returns some json data is not rocket science. Also, since it is mostly a mixed environment and linux based a lot of visual studio’s benefit are diminished. But in a plug to Microsoft and Visual Studio they have been adding a lot to their linux tooling.
Many languages. I have never been in such a schizophrenic environment. It is flavor of the day on steroids. To their defense some of this is due to acquisitions. The pro of this is it allows a lot of freedom and the choice to use a language best suited for a particular task. The con of this is that there is a ton of technical debt, and everyone becomes a master of all and an expert of none. I find this the biggest downside. Everyone is what I would call a hack at a bunch of languages but not a master of any. There is a benefit to being an expert in the language and platform you develop in. You know the best practices, best design patterns, latest features and trends, etc. I believe you develop cleaner more easily maintained and scalable code this way. To me this is the biggest downside I see to my new environment. But from a learning new things standpoint, it is nice to get to play in a lot of languages instead of only C# everyday.
In summary, I think somewhere in the middle of these 2 environments is probably the best of both worlds. Selfishly, it has been great to get the learning and exposure to all of these languages, platforms, and trends. But if it was my company I would definitely drive to some sort of defined architecture.
I am surprised how much I like the mac, terminal window, and vs code. It is a nice tool set for small tasks.
I look forward to more learning and growing. Never get too bias or stuck in your platform of expertise to not try new things with an open mind. I try to live by this in life and software development.