September 7, 2024 Career, Opinion, Success, Uncategorized No comments
September 7, 2024 Career, Opinion, Success, Uncategorized No comments
Somehow I became a generalist software engineer with a diverse domain experience. I started career with C# and moved to Javascript and then to Java and now C++. I worked for healthcare, online entertainment, nuclear energy, e-commerce, and advertising industries. In this blog post I want to share some of the details of these experiences and conclude on whether being a generalist is better than being a niche engineer.
The very first program I ever wrote was in QuickBasic in grade 6 (1999). The school computer I wrote this was only capable of running some version of DOS. Computers at university ran Windows and I learned to code in C/C++/C# + some more obscure languages (Prolog, Algol, Pascal). In my first job I wrote desktop and mobile solutions using MS technologies, mostly written in C# with WPF & WCF. My next gig was all about performant backend services with a mixed technology stack backing a multi-million user website. At my next job I found myself translating nuclear material accounting code from the 70/80s written in PL/I that ran on mainframe into Javascript or C#. Most engineers who wrote the original PL/I code either retired or died. This job taught me that I can love a dynamic programming language. Then I moved to work for Amazon, it was all about launching new business workflows and scaling it with Java services backed by AWS and ReactJS frontend. Now at Google I mainly write in C++, but from another perspective for me there was a big shift from working on products towards working on infrastructure that supports traffic for billions of users.
Now I want to have a look at all of the same jobs but from a different perspective. The first projects I worked on were for healthcare providers. Honestly, I didn’t give myself much thought about the morbidity of the things, the fact that much of the software was for hospices didn’t bother me as I was operating on the level of tasks. It was only later when I was working on a mobile app for nurses to visit patients at their homes did I internalize what this all was for. Next job probably wasn’t that noble – it was in online entertainment, more specifically sports betting. I even had an account with a competitor and placed small bets on sport events to understand how they do things compared to us. Saving the world from making more atomic bombs? Yep – that was my next job, kind of. On the ground what I was doing was merely software for IAEA (UN) and its agents who went to nuclear facilities and collected nuclear material data, performed different checks and recorded them in the app for later analysis. I got a chance to visit a nuclear reactor and learn how it works. Next gig was about enabling small companies to sell more stuff at Amazon. This was about enabling an entire channel of dropshipping for the India marketplace: loading inventory into Amazon systems, processing customer orders, invoicing, etc. This allowed me to have a good view on how e-commerce works. These days I work on supporting online advertisement from inside by working on infrastructure and tooling that allows other engineers at Google to deliver solutions to show you relevant Ads. I know ads may sound like a bad thing, but the free internet exists thanks to ads. Ads pay for those transatlantic underwater internet cables and all the other things that power today’s internet.
All of the companies I worked for were very different culturally. First job was a very homogeneous environment, all of us were Ukrainians, fairly young and we worked for our American customers who on their side were also culturally similar among themselves. I think communication gaps existed due to time zone differences and English language skills on our side. Next job was maybe half Austrians and another half of East europeans. The product we worked on was our own so I think we cared about its success a lot. I am actually not sure if I fit into this environment culturally, but I thrived on the technical front and delivering results. At the same time this was when I made many new friends who remain friends until now and I even stayed at their home on my recent trip to Europe. The United Nations is definitely a culturally most unusual environment I had to work in, mainly because of the diversity of nationalities and backgrounds. Any day at the UN premises there were people from over 100 different countries, my team alone had people from all of the continents. Something that was a bit less diverse was age, as many of the people who work for the UN are accomplished individuals with some years behind their backs. This was the place of internalizing that not everybody has the same life views on it and it’s all ok. It was extremely fascinating to learn from my colleagues. I would say that on a macro level both Amazon and Google are culturally similar – we are ambitious technically savvy individuals striving to make an impact. Though on another level Amazon is a fast paced, high intensity, customer centric, and deadline driven company whereis Google is more mission driven, long-term oriented, with more emphasis on innovation.
I can probably wear many other lenses to look at my past experiences, such as, Impact, Scale, Learning, Personal Fulfillment, WLB, Collaboration, Communication, etc. But even with the 3 lenses above it is clear that the diversity of technologies, domains, and cultures pushed me to become a generalist software engineer. Arguably, this isn’t necessarily a good thing, being extremely deep into one technology and domain can land you a ludicrously high paying job. I saw people sticking around and climbing corporate ladder rapidly, something that I couldn’t do with all the switched I did, and at the same time I saw directors being laid off just because there is no need for their role any longer. In today’s economies of scale the winner takes all. If you are at the right place and time and win the game – it is all yours. On the other hand, if you are not that “winner”, adaptability gives you an advantage of switching when needed and grabbing at least some piece of the pie or, maybe, a chance to win another game next time. I don’t know what is right, the above was my journey and it continues. What are your thoughts on going broad vs deep in your software engineering career?
June 8, 2017 Conferences, Uncategorized No comments
Few weeks ago I went to attend a WeAreDevelopers conference in Vienna. The venue is just 10 minutes walk time from the place where I live.
The official web page for the conference is here and all of the talks can be watched at youtube here.
I will go through all of the talks I watched with a very brief message before giving my thoughts on the organization of the conference.
Opening. For such a small country as Austria a conference hosting 3500+ developers is a big deal. Chancellor of Austria (most powerful position) took the keyword and, to my disappointment, for the most part spoke in German. I think this would be fine if only this conference wasn’t advertised as an international conference. In any case it is admirable that importance of IT industry is acknowledged by the Austrian government.
Build a World We All Want to Live. This talk was a lot about the future and exponential growth. I’m afraid there not much of takeaway except of a sense of a motivational inspiration.
Challenges of Autonomous Driving. I first heard about Rimac concept car on TopGear TV Show. It was very interesting to hear about the Croatia’s concept car from engineering perspective. What I learned is that there are a lot more of a challenge that has to be addressed than it is advertised by the car makers such as Tesla, Honda, etc.
IoT & Advanced Analytics – Real World Challenges for Developers. Austrian railway company explaining how they use all kinds of detectors on their trains and how their data is analysed. This does not get anywhere close to using IA, though still interesting.
One ID to Rule Them All. This was supposed to be a presentation on identification methods (think passports, ID cards) but somehow the presenter talked about solar panels, exponential growth of technology, and near free energy. Not sure how these two play together, but the title was definitely misleading.
How Different Open Hardware is to Open Software. Interesting talk, but again misleading title. Speaker presented his robotic arm project and how it can be used by people without an arm. Takeaway: these days you can download some code, buy Arduino and 3D-print yourself an arm within hours.
The Early Days of Id Software: Programming Principles. I found zillion of youtube videos with the same title where Romero gives the same talk on different conferences. Best to watch would be this another video here. He goes through the history of Id-software in the talk. Takeaway: John Romero’s Principles for Programmers
Getting Computers to Understand Us. This was a presentation on NLP and AI that started with punchcards.
How to Design Human Centered Chatbots? Takeaway: I didn’t learn how to design chatbots but I understood that chatboat euphoria is on a downtrend.
The Future of Online Money: Creating Secure Payments Globally. This was about PayPal money transactions and security. Takeway: eliminating middleman helps in improving processes.
Less Process, More Guidance. Takeway: The Atlassian Team Playbook.
Extreme Continuous Integration. Automic company presented how they do hundreds of builds of different components for multiple platforms continuously.
Continuous Delivery Journey @ Wirecard. This was more of continuation of CI and CD topic.
Monorepos in the wild. A story of going to one repository. Some pros and cons where presented with a message that monorepo != monoapp.
Rebuilding an Aircraft on the Fly. Yet another story, now about fixing CSS by Trivago company. In my opinion this was just a common sense story.
Javascript @ Netflix. Standards of JS and their life-cycle were explained.
JS @ Uber. About programming languages & architecture approaches at Uber. Things like NodeJs, Go, Python, and micro-services were mentioned in addition to JS.
The Artist and the Machine. A lightning talk about nice spiral graphs. Takeaway: I bought my daughter a spirograph toy.
Working Backwards from the Customer. Amazon explained how they start developing with a press release. If they don’t like what is written it might not make sense to start doing it. If they like what is written and it sounds cool they add more details, create more technical translation and finally this is converted into development. I believe this was my biggest takeaway from the conference in general. In software projects it happens very often that customer does not get what they want. Starting with customer and being obsessed with the customer is probably something that makes Amazon stand out.
Model-Minded Development. A presenter from Google talked about importance of having a good model between computer and the real world.
Customizing Railways to Individuality. National Austrian railroad company talked about their challenges. They are in business for 178 years and can be considered dinosaurs when it comes to software.
Scaling Open Source Communities. Tips and tricks of handling an open source project were given. A lot of insight into OS software lifecycle.
Angular, Google’s Popular Application Framework. A relatively simple demo of Angular framework was given. Takeaway: Angular will last longer than any other JS framework. Let’s see.
PHP in 2017. This was somewhat hilarious talk by the inventor of PHP. He talked about lots of performance improvements that come with PHP7 and how that can “save the planet”. Takeaway: This blog is self-hosted word-press. I upgraded the PHP version to 7 making my contribution to more sustainable future.
Developers Are Writing the Script for the Future. Definitely the highlight of the conference was a presentation by the creator of StackOverflow Joel Spolsky. This was inspirational talk and a great way to close the conference.
Many people have complained about significant overbooking for the conference. It was very unpleasant to see organizers bragging about 3,8K attendees when there was obviously not enough room for all of them. There are some angry tweets and blog posts online, like this one WeAreDevelopers – A Mess of a Conference. I agree. It was very disappointing to find myself in crowd of people and not being able to switch tracks. Basically, if you decided to switch track you would end up somewhere standing on the side not being able to listed or to see. Second day proved to be much-much better, but who knows, maybe, this is because of some people simply decided that this conference is not worth their time?
In my opinion it was the second day that saved the conference. Better talks were delivered at the second day and more comfortable access to stages, food, and company stands was possible.
In any case, I’m really happy that such a big conference was organized in the city where I live now and that many well-known speakers from well-known companies came to talk. There was a lot to learn. I’m looking forward to #WAD2018.
November 29, 2011 Uncategorized 5 comments
Of course there was need for this ORM to be born
object InsertUpdateRow(string tblName, IEnumerable fields, IEnumerable fldsValues, IEnumerable keyFlds);
void DeleteRow(string tblName, IEnumerable fieldsList, IEnumerable fieldsValues, IEnumerable keyFields);
DataTable SelectSQL(string selectSql);
It is fun to work on ORM, so why not take it further
So… here it is – CustomORM
Features at glance:
Now, let me show you some code
Sample fetch
Criteria criteria = CreateCriteria(typeof(Customer), "c") .AddEntity(typeof(Order), "o") .AddEntity(typeof(Employee), "e") .AddSQL( @"left join Orders o on c.[Customer ID] = o.[Customer ID] left join Employees e on e.[Employee ID] = o.[Employee ID] where c.[Customer ID] = @customerId") .AddParameter("@customerId", customerId); List<Customer> customers = ExecuteCriteria<Customer>(criteria);
Sample save
public Customer SaveCustomer(Customer customer) { var transaction = BeginTransaction(); Customer savedCustomer = null; try { savedCustomer = Save(customer); transaction.Commit(); } catch (Exception) { transaction.Rollback(); } return savedCustomer; }
Mappings
class CustomerMap : EntityToTableMapper<Customer> { public CustomerMap() { Table("Customers"); Id(x => x.CustomerID, "Customer ID") .UseAssignedValue(); Map(x => x.CompanyName, "Company Name"); Map(x => x.ContactName, "Contact Name"); Map(x => x.ContactTitle, "Contact Title"); Map(x => x.City, "City"); HasMany(x => x.Orders, "Customer ID"); } }
Get started code
// Let CORM know where your mappings live and that's mostly it MagicMapper.ScanForMappers(Assembly.GetExecutingAssembly()); // Initialize AdoDataAccess or (advanced) implement your own IDataAcces var s = ConfigurationManager.ConnectionStrings["NorthwindConnectionString"]; var ceDataAccess = new AdoDataAccess(s.ConnectionString, s.ProviderName); // You are ready to use you repository, it already has Fetch<T>, Save, Delete
What is at codeplex now and what’s next?
August 22, 2011 Uncategorized No comments
Hello. Officially this is my 200th blog post.
In my “100th blog post” I wrote that blogging pays off and indeed it brought me many cool things, like knowledge, opportunities, also I became noticeable by others in my company.
In that hundred posts I finished my series on design patters. I prepared for being senior developer and became him. I delivered many presentations, including one big it-jam. I wrote few popular posts on career plan and interviews. I had many other not less interesting posts.
It took me 9 months to have those first 100 posts and now I see that next portion took me over year. Interesting… when will I get my 300th post. Would it take year, less, or more? I cannot answer, but I know that blogging started to be hard for me. Not because I don’t have things to blog about, but because I don’t stop myself for few moments to write about something. Almost each day I have some challenges at work, I can blog about. I read many interesting stuff, which I can try out and blog about. But I don’t.
I know, I know real blogger shouldn’t write such posts. And I wouldn’t even try to convince anyone that I’ve been very busy or something… I had lot of routine stuff that many people have all their life. I had nothing unusual but for some reason lost feeling of the road I’ve decided to take. Why did I?
I have disease – I often think that I will do the stuff later, maybe in the evening or tomorrow. And when I think so I do nothing next day. It is damn stupid habit. For the dozen of weeks I thought that I will post latest 2 design patterns, but I did not. Some time passed and I had them on my blog, but it was too hard.
Why do I think that I will do all the stuff tomorrow? It is not possible. There are guys at work that never think that way. They are so much responsible, they fill that cannot left working place until some good portion of their job is done. WTF? Why I don’t have such skill?
I probably didn’t read my blog for some long time! I need to! Here is something that gives me some advices on how I should proceed.
Where have I been? Nothing is going to be tomorrow if I do nothing today!
I DO NOT LEAVE THINGS FOR TOMORROW!!!
November 5, 2010 Uncategorized 4 comments
Here in Lviv we have awesome Java User Group and yesterday I had chance to speak there and again about DDD. So I probably have nothing to add about presentation itself. Presentation has only this icon on the top as a difference:
But I have something to add about the group itself and performance. Group is slightly different from .NET one. It is smaller – about 15 people were listening to me. But guys in group have much more solid experience in developing software. They all are in their late 20th and some in 30th I guess. They ask slightly another scope of questions. All of the them know how to build complex software and they know a lot of design patterns. That is why I guess listening about DDD was not something special and absolutely new for them, since I see DDD as some (new) set of (existing) design patterns and (existing) approaches to build software starting from model.
After my presentation, very enthusiastic person Zenyk talked about one of the approaches of using Amazon could. For me it was very interesting and exciting, since it was first time I’ve heard about more or less complete solutions based on many Amazon services.
BTW, Zenyk does great job on keeping software developers community site, all in Ukrainian:
Group is not sponsored by Oracle, as .NET group is sponsored by Microsoft. They do not have that many presents, but they do their best in keeping their own library of books.
Looking forward to hear from guys, who listened to me.
October 17, 2010 Uncategorized No comments
NuPack is package manager for .NET introduced to help developers easily work with 3rd party libraries.
Here is great post on NuPack, I would recommend to read.
But as I promised in twitter to have blog post called “What the hack is NuPack”, I need to post this.
So,… downloading…
After it get downloaded and installed, we have one additional menu item in same place where we do have “add reference”:
So what does “Add Package Reference” do?
It takes a look on the feed for packages, where you see 3rd party you can add. On the picture below I just added AutoMapper, by clicking “Install”.
I can easily search for other components and install them. On the picture below I easily searched for my favorite ORM – Nhibernate and installed it. But if you ever worked with it you know that it depends on few other 3rd party, such as log4net, etc. Great news! They all get installed automatically.
Physically it puts config file within your project and locate all your components under folder ”packages” along with your solution file, like below:
After that I got interested to know how it behaves with couple of solutions all in SAME folder, and figured out that it works just fine – it puts everything into same folder.
Everywhere I read about nupack they all declare that it is solution related, so I have one folder for solution. But as you may know I work with enterprise project and we keep all 3rd party in separate location where dozen (20-30) solutions are looking for references. And it looks that I do not have possibility to configure NuPack to put “packages” folder in another place. Or I’m missing something. Please let me know.
EDITED (Oct 17, 11:39PM): I already got an answer for my question:
So to shortly summarize:
NuPack allows you easily fetch whole range of different 3rd party components and momentarily add references to your projects without need to manually go and download them, then unpack and reference. Also NuPack allows you easily manage all of your components, allowing you update them and do other cool stuff. Go and check it out!
October 17, 2010 Uncategorized 2 comments
I guess all bloggers know about such things as Google Analytics and Feedburner. But if you are not blogger, in few words those are statistics engines analyzing site’s visits. I’m keeping eye on statistics and here just want to share some information and thank you all.
Here is where from you all guys are:
Just another more deterministic representation of the same information:
Sadly, but I turned on Google Analytics only in the end of this summer, so pictures above do not represent whole life-time of my blog.
But feedburner states following about my Subscribers:
I have 30 readers on average for the whole time of existing of this blog. Most recent average numbers are near 50.
Also accordingly to feedburner I have:
Also I have 256 comments.
All of this shows me that my blog is getting more popular and it continues paying me back…
August 2, 2010 Uncategorized No comments
I listen to few tech podcasts, which talk on programming. I fill with them my time, when getting to the work or traveling somewhere. So no time lost :) Also except of getting good valuable information I sharpen my English. For folk who it trying to reach success in software development it is very important.
So here is my list of podcasts I listen to. Please note, it will not be comprehensive list of podcasts, since I do not listen to all. If you want to see more comprehensive list proceed with this link where Scott Hanselman mentioned his list along with links to lists of other folks.
.NET ROCKS
This is amazing podcast. Besides it brings great content it is also very fun stuff. Carl and Richard talk easily, they interview lot of interesting people. These guys might be surprised that someone wrote “.NET ROCKS” on his body being in mountains far from in Ukraine…
Continuation of the list (I might add more comments in future):
Hearding code
Deep Fried Bytes
Software engineering radio
Elegant Code
Chanel 9
Hanselminutes
[Edited]
This Developers Life
Let me know which of the listed you also listen and which would you recommend for me.
October 10, 2009 Uncategorized 2 comments
Hi,
I’m still a student, but I already started to work for one really dedicated company. The company made me very pragmatic. I found that there are people who want to get to the success and there are others who are not so keen to work hard.
I’m not one of those lazy and goalless guys. After reading a couple of books on success (Robert Kiosaki, Bodo Scheffer, Napoleon Hill) and after realizing that at the same moment my company started to develop our own certification model for Developers, I found a target for myself in my life.
When employee gets a promotion, usually there was hard word toward it. And this is what I got to do in the middle of Spring 2009. I was promoted to Intermediate Developer, after working 11 months as Junior Developer.
My next target is to became Senior Developer before I get my Master Diploma. You could say that my company is unwise if it will promote you or that my University is bad as it allows me to work at the time when I’m studying. What I would say is: I’m pragmatic and this is my way to Success, so I will broke any wall you will put on my way.
First purpose of this blogging is to have place where I can put my Developer founds, investigations, thoughts on different technologies, etc.
Second purpose it to help you in your findings over Internet. I know that google knows all, but google doesn’t know things that only particular persons discovered and did not post it somewhere. I will be posting my founds so google will know more.
I hope this will help you and me!