--- layout: post title: "The dispassionate developer" description: "Caring for your craft is fine, but should you work for free?" date: 2021-03-22 6:50 UTC tags: [Miscellaneous] --- {% include JB/setup %}
{{ page.description }}
I've met many passionate developers in my career. Programmers who are deeply interested in technology, programming languages, methodology, and self-improvement. I've also seen many online profiles where people present themselves as 'passionate developers'.
These are the people who organise and speak at user groups. They write blog posts and host podcasts. They contribute to open source development in their free time.
I suppose that I can check many of those boxes myself. In the last few years, though, I've become increasingly sceptic that this is a good idea.
In the last five years or so, I've noticed what looks like a new trend. Programmers contact me to ask about paid mentorship. They offer to pay me out of their own pocket to mentor them.
I find that flattering, but it also makes me increasingly disenchanted with the software development industry. To be clear, this isn't an attack on the good people who care so much about their craft that they are willing to spend their hard-earned cash on improving their skill. This is more a reflection on employers.
For reasons that are complicated and that I don't fully understand, the software development community in the eighties and nineties developed a culture of anti-capitalism and liberal values that put technology on a pedestal for its own sake. Open source good; commercial software bad. Free software good; commercial software bad.
I'm not entirely unsympathetic to such ideas, but it seems clear, now, that these ideas have had unintended consequences. The idea of free software, for example, has led to a software economy where you, the user, are no longer the customer, but the product.
The idea of open source, too, seems largely defunct as a means of 'sticking it to the man'. The big tech companies now embrace open source. Despite initial enmity towards open source, Microsoft now owns GitHub and is one of the most active contributors. Google and Facebook control popular front-end platforms such as Angular and React, as well as many other technologies such as Android or GraphQL. Continue the list at your own leisure.
Developing open source is seen as a way to establish credibility, not only for companies, but for individuals as well. Would you like a cool job in tech? Show me your open-source portfolio.
Granted, the focus on open-source contributions as a replacement for a CV seems to have peaked, and good riddance.
I deliberately chose to use the word portfolio, above. Like a struggling artist, you're expected to show up with such a stunning sample of your work that you amaze your potential new employer and blow away your competition. Unlike struggling artists, though, you've already given away everything in your portfolio, and so have other job applicants. Employers benefit from this. You work for free.
You're expected to 'contribute' to open source software. Why? Because employers want employees who are passionate about their craft.
As you start to ponder the implied ethos, the stranger it gets. Would you like engineers to be passionate as they design new bridges? Would you like a surgeon to be passionate as she operates on you? Would you like judges to be passionate as they pass sentence on your friend?
I'd like such people to care about their vocation, but I'd prefer that they keep a cool head and make as rational decisions as possible.
Why should programmers be passionate?
I don't think that it's in our interest to be passionate, but it is in employers' interest. Not only are passionate people expected to work for free, they're also easier to manipulate. Tell a passionate person something he wants to hear, and he may turn off further critical thinking because the praise feels good.
Some open-source maintainers have created crucial software that runs everywhere. Companies make millions off that free software, while maintainers are often left with an increasing support burden and no money.
They do, however, often get a pat on the back. They get invited to speak at conferences, and can add creator of Xyz to their social media bios.
Until they burn out, that is. Passion, after all, comes from the Latin for suffering.
I remember consulting with a development organisation, helping them adopt some new technology. As my engagement was winding down, I had a meeting with the manager to discuss how they should be able to carry on without me. This was back in my Microsoft days, so I suggested that they institute a training programme for the employees. To give it structure, they could, for example, study for some Microsoft certifications.
The development manager immediately shot down that idea: "If we do that, they'll leave us once they have the certification."
I was flabbergasted.
You've probably seen quotes like this:
This is one of those bon mots that seem impossible to attribute to a particular source, but the idea is clear enough. The sentiment doesn't seem to represent mainstream behaviour, though."What happens if we train our people and they leave?"
"What happens if we don't and they stay?"
Granted, I've met more than one visionary leader willing to invest in employees' careers, but most managers don't.
While I teach and coach internationally, I naturally have more experience with my home region of Copenhagen, and more broadly Scandinavia. Here, it's a common position that anything that relates to work should only happen during work hours. If the employer doesn't allow training on the job, then most employees don't train.
What happens if you don't keep up to date with new methodologies, new frameworks, new programming languages? Your skill set becomes obsolete. Not overnight, but over the years. Finding a new job becomes harder and harder.
As your marketability atrophies, your employer can treat you worse and worse. After all, where are you going to go?
If you're tired of working with legacy code without tests, most of your suggestions for improvements will be met by a shrug. We don't have time for that now. It's more important to deliver value to the customer.
You'll have to work long hours and weekends fire-fighting 'unexpected' issues in production while still meeting deadlines.
A sufficiently cynical employer may have no qualms keeping employees busy this way.
To be clear, I'm not saying that it's good business sense to treat skilled employees like this, and I'm not saying that this is how all employers conduct business, but I've seen enough development organisations that fit the description.
As disappointing as it may be, keeping up to date with technology is your responsibility, and if you can't sneak in some time for self-improvement at work, you'll have to do it on your own time.
This has little to do with passion, but much to do with self-preservation.
The programmers who contact me (and others) for mentorship are the enlightened ones who've already figured this out.
That doesn't mean that I'm comfortable taking people's hard-earned money.  I think that your employer should pay for that.
I'm aware that most companies don't want to do that.  This basically means that I can't really mentor you, unless you can reproduce the problems you're having as anonymised code examples.
But if you can do that, you can ask the whole internet. You can try asking on Stack Overflow and then ping me. You're also welcome to ask me. If your minimal working example is interesting, I may turn it into a blog post, and you pay nothing.
People also ask me how they can convince their managers or colleagues to do things differently. I often wonder why they don't make technical decisions already, but this may be my cultural bias talking. In Denmark you can often get away with the ask-for-forgiveness-rather-than-permission attitude, but it may not be a good idea in your culture.
Can I magically convince your manager to do things differently? Not magically, but I do know an effective trick: get him or her to hire me (or another expensive consultant). Most people don't heed advice given for free, but if they pay dearly for it, they tend to pay attention.
Other than that, I can only help you as I've passionately tried to help the world-wide community for decades: by blogging, answering questions on Stack Overflow, writing books, speaking at user groups and conferences, publishing videos, and so on.
Yes, I know that I fit the mould of the passionate developer. I've blogged regularly since 2006, I've answered thousands of questions on Stack Overflow, I've given more than a hundred presentations, been a podcast guest, and co-written a book, none of which has made me rich. If I don't do it for the passion, then why do I do it?
Sometimes it's hard and tedious work, but even so, I do much of it because I can't really help it. I like to write and teach. I suppose that makes me passionate.
My point with this article isn't that there's anything wrong with being passionate about software development. The point is that you might want to regard it as a weakness rather than an asset. If you are passionate, beware that someone doesn't take advantage of you.
I realise that I didn't view the world like this when I started blogging in January 2006. I was driven by my passion. In retrospect, though, I think that I have been both privileged and fortunate. I'm not sure my career path is reproducible today.
When I started blogging, it was a new-fangled thing.  I was in the right place at the right time.
The same is true for Stack Overflow. The site was still fairly new when I started, and a lot of frequently asked questions were only asked on my watch. I still get upvotes on answers from 2009, because these are questions that people still ask. I was just lucky enough to be around the first time it was asked on the site.
I'm also privileged by being an able-bodied man born into the middle class in one of the world's richest countries. I received a free education. Denmark has free health care and generous social security. Taking some chances with your career in such an environment isn't even reckless. I've worked for more than one startup. That's not risky here. Twice, I've worked for a company that went out of business; in none of those cases did I lose money.
Yes, I've been fortunate, but my point is that you should probably not use my career as a model for yours, just as you shouldn't use those of Robert C. Martin, Kent Beck, or Martin Fowler. It's hardly a reproducible career path.
What can you do, then, if you want to stand out from the crowd? How do you advance your software development career?
I don't know. I never claimed that this was easy.
Being good at something helps, but you must also make sure that the right people know what you're good at.
Just beware that you aren't being taken advantage of. Be dispassionate.
Comments
Thanks Mark for your post.
I really relate to your comment about portfolio. I am still a young developer, not even 30 years old. A few years ago, I had an unhealthy obsession, that I should have a portfolio, otherwise I would be having a hard time finding job.
I am not entirely sure where this thought was coming from, but it is not important in what I want to convey. I was worrying that I do not have a portfolio and that anxiety itself, prevented me from doing any real work to have anything to showcase. Kinda vicious cycle.
Anyways, even without a portfolio, I didn't have any troubles switching jobs. I focused on presenting what I have learned in every project I worked on. What was good about it, what were the struggles. I presented myself not as a just a "mercenary" if you will. I always gave my best at jobs and at the interviews and somehow managed to prove to myself that a portfolio is not a must.
Granted, everybody's experience is different and we all work in different market conditions. But my takeaway is - don't fixate on a thing, if it's not an issue. That's kinda what I was doing a few years back.


Remark:
The following is based on the Kubernetes version1.13.1
. The steps below and the scripts for the Hyper-V guests may need to be adapted when using a different version.
The steps are:
in short:
@ACP_Create-MasterNode
as an administrator@ACP_Create-WorkerNodes
as an administratorroot
.@ACP_Create-Cluster
as an administrator.Reference: https://stackoverflow.com/questions/24729024/open-firewall-port-on-centos-7
Reference: https://kubernetes.io/docs/setup/independent/install-kubeadm/#check-required-ports.
Reference: https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm
Reference: https://github.com/coreos/flannel
In File Explorer on the host, run @ACP_Create-MasterNode
as an administrator.
Alternatively, in a PowerShell on the host:
Create-MasterNode devenv0
From the PowerShell terminal, the script will automatically open another terminal for devenv0
, and run a guest script in it.
In File Explorer on the host, run @ACP_Create-WorkerNodes
as an administrator.
Alternatively, in a PowerShell on the host:
Restore-VMFromVHD devenv1 kubernetes
Restore-VMFromVHD devenv2 kubernetes
For each of the restored guest VMs devenv1
and devenv2
, from the PowerShell terminal, the script will automatically open a console for the new guest, and run a guest script in it.
root
.devenv1
, or "2" for a VM with name devenv2
. Press "Enter". Remark that you can see the name of the virtual machine in the top-left corner of the console.For each of the restored guests VMs devenv1
and devenv2
, from the PowerShell terminal, the script will automatically open another terminal for the guest, and run a guest script in it.
putty
and PuTTY's pscp
commands. They will ask you Store key in cache? (y/n)
or Update cached key? (y/n, Return cancels connection)
. Type "y".These scripts create two virtual machines:
Check full network availability for each of the nodes.
In a Command Prompt on the host
ping devenv-host
ping devenv0
ping devenv1
ping devenv2
In a terminal for devenv0
ping devenv-host
ping devenv0
ping devenv1
ping devenv2
In a terminal for devenv1
ping devenv-host
ping devenv0
ping devenv1
ping devenv2
In a terminal for devenv2
ping devenv-host
ping devenv0
ping devenv1
ping devenv2
Reference: https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm
In File Explorer on the host, run @ACP_Create-Cluster
as an administrator.
Alternatively, in a PowerShell on the host:
Generate-ClusterToken.ps1 devenv0
Join-Cluster.ps1 devenv1 devenv0
Join-Cluster.ps1 devenv2 devenv0
Remark:
On a slow host, the timers in the scripts may be a bit too short. You can increase them, or introduce extra timers, using following guidelines:
Once the master node is created, the POD-network is working, and all "coredns-*" PODs are "Running", you can create the cluster.
In a terminal fordevenv0
kubectl get pods --all-namespaces
Once the cluster is created, and all nodes are "Ready", you can go to the next step.
In a terminal fordevenv0
kubectl get nodes
Remark:
If you run these tests after re-booting the nodes, then it may take one or two minutes for the cluster to start-up. Your will get a message likeThe connection to the server <IP_ADDRESS>:6443 was refused - did you specify the right host or port?
Check the connectivity, as described under Test Kubernetes Nodes, and if all looks in order, try again after a couple of minutes.
Test that all nodes are "Ready". In a terminal for devenv0
kubectl get nodes -o wide
You should get something like:
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
devenv0 Ready master 3m43s v1.13.1 <IP_ADDRESS> <none> CentOS Linux 7 (Core) 3.10.0-957.1.3.el7.x86_64 docker://18.9.0
devenv1 Ready <none> 98s v1.13.1 <IP_ADDRESS> <none> CentOS Linux 7 (Core) 3.10.0-957.1.3.el7.x86_64 docker://18.9.0
devenv2 Ready <none> 66s v1.13.1 <IP_ADDRESS> <none> CentOS Linux 7 (Core) 3.10.0-957.1.3.el7.x86_64 docker://18.9.0
Test that all pods are "Running". In a terminal for devenv0
kubectl get pods --all-namespaces -o wide
You should get something like:
NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
kube-system coredns-86c58d9df4-82wsz 1/1 Running 0 4m13s <IP_ADDRESS> devenv0 <none> <none>
kube-system coredns-86c58d9df4-vw2tl 1/1 Running 0 4m13s <IP_ADDRESS> devenv0 <none> <none>
kube-system etcd-devenv0 1/1 Running 0 3m21s <IP_ADDRESS> devenv0 <none> <none>
kube-system kube-apiserver-devenv0 1/1 Running 0 3m18s <IP_ADDRESS> devenv0 <none> <none>
kube-system kube-controller-manager-devenv0 1/1 Running 0 3m11s <IP_ADDRESS> devenv0 <none> <none>
kube-system kube-flannel-ds-amd64-872ts 1/1 Running 0 4m13s <IP_ADDRESS> devenv0 <none> <none>
kube-system kube-flannel-ds-amd64-bc7x4 1/1 Running 1 115s <IP_ADDRESS> devenv1 <none> <none>
kube-system kube-flannel-ds-amd64-wkrkj 1/1 Running 0 2m27s <IP_ADDRESS> devenv2 <none> <none>
kube-system kube-proxy-2qrpz 1/1 Running 0 4m13s <IP_ADDRESS> devenv0 <none> <none>
kube-system kube-proxy-2x9tg 1/1 Running 0 115s <IP_ADDRESS> devenv1 <none> <none>
kube-system kube-proxy-tf7lh 1/1 Running 0 2m27s <IP_ADDRESS> devenv2 <none> <none>
kube-system kube-scheduler-devenv0 1/1 Running 0 3m21s <IP_ADDRESS> devenv0 <none> <none>
At this point it is a probably a good idea to save the virtual machine's virtual hard disk as for future use.
In File Explorer on the host, run @ACP_Save-DevEnv-cluster
as an administrator.
Alternatively, in a PowerShell on the host:
Save-VHD devenv0 cluster-devenv0
Save-VHD devenv1 cluster-devenv1
Save-VHD devenv2 cluster-devenv2
This script creates virtual hard disks for the Kubernetes cluster:
$HOME\DevEnv\Virtual Hard Disks\cluster-devenv0.vhdx
$HOME\DevEnv\Virtual Hard Disks\cluster-devenv1.vhdx
$HOME\DevEnv\Virtual Hard Disks\cluster-devenv2.vhdx


Landing Page Guide Part 3: The Look
19 Jun 2015The purpose of a landing page is to make people excited about your product or service. Your landing page is your chance to make a great first impression on your future customers. An ugly page makes for bad first impressions.
Now a lot of you might be thinking, "I'm a terrible graphic designer!". And that's ok! You aren't in the business of building a pretty webpage. You're in the business of selling your product to your waiting customers. Luckily for all us coders, there are tons of pretty templates already available online.
Where to Find Templates
We recommend Blacktie. There's a lot of good ones there, but these two are specifically for a landing page:
Making Small Adjustments
While the templates are a good start, you might need to adjust a few things here and there. This guide isn't meant to be an HTML and CSS tutorial, but we'll outline a general workflow you can use to make small changes to the look.
- Open up
index.html
in a browser. - Right click on the something you want to adjust and select Inspect Element.
- Take note of the Styles sidebar. Play around with it in the browser until you get your desired look. The Rules will show you which file each property comes from.
- Copy the changes in the browser into the appropriate file.
Now that we have our template set up, let's get some pretty images for our website.


Grab your seats and hold on tight for Lightning Talks will bring you on an adventure like never before. Just within a span of 5 minutes or so, our speakers will take your hand and guide you through different topics such as concepts, events, projects and more! Each talk is equipped with tons of information and packs a punch. Focus and listen, you just might be able to catch that lightning when it flashes!
I can show you the worl-...ahem*. I can show you A-level Computing in JC. Grab your seats for our speaker will bring you on a journey to show you what computing in JC is about.
Hmm..so similar yet its clearly different. Real or Fake? Join us to find out how to differentiate images using various algorithms.
"Alas! It is finished! My masterpiece is finally done!" The Project Showcase features a gallery of python-related projects skillfully devised and coded by our students. These projects are made to solve real-world problems and to achieve one of many goals, namely, to save the world through technology. Enjoy our students masterpieces and feel free to consult them on their projects.
Profile page rampant with vulgarities? Social media page screaming obscenities that makes your skin crawl and makes you want to puke? Have no fear! Introducing the new and unique online protection, SocialShield! Its not an antivirus but it will detect and notify you if there are harmful content on the social site you're on. Once implemented, this intelligent programme automatically sieves through the content on the page and warns you about the danger on that page. Ain't that neat? *clunk* Behold, the SocialShield, the mighty blockade against harmful content.
 Gotcha! Ever wanted your own CCTV camera to survey or watch over your belongings? Well fret no longer for we will show you how to create one by yourself simply using only Raspberry Pi and the Telegram App! You can control it remotely through the app allowing you to adjust the angle and view from where you like the most!
~I have Raspberry Pi, I have Telegram. Ungh! RPiCam!~
Here Ye! Here Ye! Teachers gather round, for there is a new and improved technology in town. Late students giving you a hard time? Struggling to hound students for their homework? Well, suffer no more! From the depths of a group of students' minds, we bring you, Eduto! Created just for you and with you in mind, Eduto is a comprehensive learning management system that intelligently tracks homework and marks attendance automatically. You no longer have to do it yourself! Sit back, Relax, Prop those tired legs on the table and enjoy that cup of morning coffee while the application helps you record the attendance of students!


Every time you click the button, getTheButton(min, max) returns a random number between 0 and 9 (both included):


TRY IT NOW
INTERACTIVE CONCERT EXPERIENCE
Experience your favourite artists like never before and from the comfort of your home.
TRY IT NOW
INTERACTIVE CONCERT EXPERIENCE
Experience your favourite artists like never before and from the comfort of your home.
TRY IT NOW
Previous
Next


• Experience in software development
• Develop and debug games, applications, and website using OOP and data structure in multiple programming languages, including C#, Java, C++, and NodeJS
• Experience with Java such as layout manager, swing, and multi-threading, and C# such as async/await, Background worker
• Familiar with many frameworks and libraries, including Hibernate, Spring Framework, WPF, .NET/ .NET Core, and Autofac
• Knowledge of Agile methodology such as Scrum and Kanban, architecture patterns like MVC, MVVM.
• Able to build and manage database systems such as MSSQL Server Management, Oracle, MySQL, and MongoDB
• Excellent team spirit, problem-solving, and communication skills with multiple languages, including English, Vietnamese, and Cantonese
Maintaining a 3.96 GPA
Expected date of graduation: May 2021
Valedictorian graduate with an overall GPA of 3.5
Building, maintaining, and switching pharmacy chain store website from ASP.NET to Java
Welcome new students to Conestoga College and answer student inquires
My position is a volunteer who greeted guests and supported fundraising furing the Titan's basketball match.
I participated as a Computer Assistant who helps new students using College's services and software on the orientation. In addition, I was selected as a representative on the student panel to share on and off campus experience.
Apart from being a CPA students. I enjoy learning new programming languages through Lynda.com and w3school.com such as C/C++ and Nojejs
I also force myself to be more active by going to the gym or playing sports such as badminton, soccer, swimming, and running with my friends
Listening to music, watching movies and TED talks are some of my favorite entertainment after a long day of study and work.


SIT enables decentralized, sporadically connected parties to contribute and process shared information
If you are adventurous, you know what to do with this:


--- layout: page title: Hi, I'm Subba Reddy Oota subtitle: PhD student in
My research work mainly focus on Language comprehension in the Brain, Brain Decoding and Brain Image Analysis, Geometric DeepLearning, Building models and tools for Resource-poor languages, Natural Language Processing, Computer Vision, Medical Imaging.
After obtaining my M.Tech degree at IIIT-Hyderabad, I joined as a research assistant in Cogntive Science Lab at IIIT-Hyderbad in 2016 under the guidance of Prof. Bapi S Raju.
Along with my research collaboration, I joined as a Sr. Data Sciencet at Woundtech Innovative Healthcare Solutions, India in 2018 and published several research works on Wound Image Healing at WACV 2021 and CODS-COMAD 2021.
Before Woundtech, I worked as a Data Scientist at Teradata, India in 2016-18.