I've been a professional developer since I graduated in 1987. I am currently the lead for a team of five (including myself) doing front-end development on SaaS software (official title is Application Architect). Apparently, at 53 and still up-to-date and still developing I've become a novelty :)
Ask away...
Hi John! I have a few questions for you, if you don't mind:
1) How do you kept motivated as a developer troughout the years?
2) What tools do you use for development?
3) Wich current trend in development would be consider "black magic" when you started your carreer?
4) Have you achieved your life goals to this day?
1) Motivation is generally not hard for me. Only if I'm working for someone who is really unpleasant to employees am I demotivated (and I've definitely been there). The work itself is usually interesting enough that I don't find it hard to do that all day every day. Only a really unpleasant bug or ops task which drags on can get tedious.
2) I use WebStorm and VS Code as my editors. I cannot explain why I keep flipping back and forth but I do for some reason. Lately it has been WebStorm at work and VS Code at home and likewise I've been using Chrome at work and Firefox at home. Maybe it's my brain seeking more variety. Beyond that it's the usual stable of JavaScript related tools: Node.js, NPM, Gulp (until very recently, now that all major browsers support JS modules I'm beginning to use those and webpack too). I built JSCrate.com with Hugo but I'm on the fence about it, I'm tempted to try out Gatsby instead. I use Ansible to do provisioning of really cheap commodity machines at places like Digital Ocean (think $5/mo) and deployment of my hobby apps.
3) Interesting. When I started your main tool was your compiler (we used Microsoft C) an editor and some manuals (way fewer of those than you think). That was basically it. I think we could probably envision most everything you see today except for the explosion and speed of change. However, that's not really "black magic", so the only thing that I've seen that really rises to that level is what we're seeing in AI with tools like Tensorflow. AI for most of my career has not produced anything tangible that actually worked in any useful way. To have off-the-shelf packages that can say, "That's an orange. That's a dog. That's John." That's the first thing that might be a real surprise to 1987 me.
4) Hell no :) But there's still time.
Thanks a lot for taking the time to answer!
Would you say your career path is still pretty consistent with new developers of today? From what I hear, most people move upward to management and develop less often, while others stay in development strictly as opposed to doing a both.
It's difficult for me to say how my career path compares to someone much younger. I advanced quickly in my early years at Tandy, I seem to be advancing quickly in this current job (a couple of promotions in the last few years, maybe another sometime soon if I'm lucky). So I think it's consistent with my past experience but I never had the Silicon Valley startup experience so I don't know exactly what that's like.
Most of those who I know moved toward management don't develop "less often", they ultimately have to give it up completely. There's certainly no way to stay up to date on the front-end unless you do development almost every day. Perhaps it would take longer to get behind if you were working in a more stable world like a given SQL solution (say Oracle) or something like Java. But even then, it would become difficult after a while. There's just a muscle memory to doing this stuff every day.
My management duties are strictly related to the development and work side of thing. Do I know what everybody is doing? If anybody is stuck, can I unstick them? Does everybody have tasks to do in their queue as well as some optional stuff that advances us on a higher level (for example our recent move from Gulp to webpack or our installation of Sentry into an app; that stuff can be a fun change of pace from bugs or even new development)?
But personnel issues like somebody showing up late to work or leaving early too much are things I don't have to deal with. I don't really have any of those at the moment, but if I did, they would be someone else's problems. I deal only with the work side of things. So when it comes to figuring out how to herd all the cats to a particular technology, that's on me :)
OMG Tandy :D my first computer with its 2 floppydrive and no hdd.
Never thought i'd read this name again :)
Curious as to your answers or thoughts for The Really Big Questions.
After settling those nigh impossible questions, then we can move on to the easy ones like ending world hunger, lasting peace in the Middle-East, and sustainable nuclear fusion energy.
1: I'm an Emacs guy. That's what I learned in 1983 and it's the only one I still kind of remember. However, day to day I'm in Webstorm or VS Code, not Emacs :) I did learn Vi's two modes: beeping and not beeping though.
2: Spaces. Interesting that I don't remember anybody warring about this one back in the 80's or 90's.
3: Unix. Does Windows qualify as an operating system? I'm showing my prejudices there. I'm a Mac user so I typically only interact by choice with BSD Unix on the Mac or Linux on one of my Ubuntu servers.
Still have my fingers crossed to see nuclear fusion in my lifetime. If so, that would be a game changer.
Since you use a Mac, have you worked with Swift?
I started programming in 1976, with the first program I worked on (as a contributor) was Oregon Trail on an HP minicomputer used by TIES. I used to use emacs, switched to vi many years ago ("it's too late for me; save yourself!"). I tend to use tabs, but I don't care; I care about consistency. I'm a Unix guy; and my machine at home is a Mac. I live in C++ day-in-and-day-out and I envy you for escaping from C++'s clutches.
I did a small amount of Objective-C a few years ago but never tried Swift.
Just ran across this ama. As a fellow old-timer, I wanted to let you know how much I enjoyed your thorough and insightful answers and discussion. You're far more patient than I could ever be. Well done!
Hello John, help me on this : I want to create my own website using new technologies, so I can both learn the new skills and have something that would keep me excited and motivated to keep on learning new skills and share them. It is pretty much gonna be an educational sort of website about web development.
The problem : it seems that I cannot start building the website, because I cannot "imagine" all the architectural details that the website is gonna have. I keep on thinking "so how many fields the 'users' table is gonna have?", "does 'article' need to be an object? if so, what fields does it have?"...and so on many "idiotic and paranoid" thoughts come to me paralyzing me!
Can you give me a general overview of WHAT should I do? I am gonna use Laravel with either Angular or React. Thanks!
I suffer from that as well and I'm sure many others do too. Some of the things people do to get past that are having a deadline (either artificial or real), working with somebody else (so there's somebody to whom you're accountable), coding some katas, etc.
Some of the same things that help authors get past writer's block would no doubt help.
But I'm a big proponent of the idea that "success breeds success". If you can get yourself any small win, even deploying a static HTML page to a server (if you don't have that already), makes it that much more likely that you'll take another step to improve it in some small way and do so again and again.
It's super easy to convince yourself that the time spent reading about technologies, gathering articles about similar websites, and planning is real work. But it's not if the project never happens. So it needs to happen in direct proportion to how much time really gets put into building something. I can tell you that every single thing I've built changed over time, usually significantly. It did that because of user feedback, my own understanding of what I was building (which was poor to start with, no matter how good I thought it was), and because of how well or poorly it did.
I was thinking of doing just that, to start creating the template of my website with Bootstrap. I figured that would be a good start point and the rest would follow.
Thanks, have a nice day :)
How have you stayed on the individual contributor path without getting pulled into principally management duties? Something I've noticed is as programmers get more senior, they get a team, then they manage the team, and the stakeholders, and the project and before they know it, they are a manager and not really a coder.
Also, what do you find works for staying fresh and up to date?
I just realized that I had done a poor job of answering your first question, "How have you stayed on the individual contributor path without getting pulled into principally management duties?"
Ultimately it came down to turning down several opportunities to change jobs. Twice it has come up in the last five years that I could move in that direction. One time I was sure I didn't want it unless I had no choice, I was given the choice and turned it down. The other I briefly thought I wanted a different position but when I really sat and looked at it dispassionately I realized that someone else I knew had a very similar job and I never ever envied him. I knew he got a better payout when it came bonus time, but other than that his job just seemed like a drag to me. So I dropped the attempt to change.
Fortunately, they know I'm interested in advancing and the possibility of another move up within the tech track has been floated recently so I don't appear to be stuck at the very top rung on the tech side just yet. At a lot of places, they just don't bother trying to nurture the technical side and offer a corresponding set of advancements for that side. So you can end up unable to move up after a certain point. I don't have that here, so that makes my choice a reasonable one.
Thank you, I appreciate the clarification. Very helpful!
I have managed to avoid the management duties thus far. I do have to devote more of my time to knowing what my team is doing now than I used to and making sure that they all have a stream of work to do. But that has impacted me only a limited amount (perhaps a day a week has been traded off for lead duties).
I've found over the years that there is no substitute for building things to stay current. I simply cannot learn from videos or reading without actually having a real project to try out the things. The reason I put the emphasis on the "real" there is that I feel like having a project that actually has to do something and which people could use forces you to solve problems that you might get stuck on and abandon if there was no reason to power through them to get to a finish line.
For example, my current project is over here: madgameslab.com/
If you click through the various lists aren't going to make a lot of sense to you if you're not really into board games, but it's effectively a spot for people to see what others are selling/buying before going to a convention together. I'm currently working on improvements to it that will add user accounts so that I can then ask for donations to my favorite charity (Extra Life - extra-life.org/index.cfm?fuseactio...) so donators will get extra features on the site. Doing stuff like that gives me the incentive to finish. Don't finish; non-profit children's hospitals don't get money. That's enough incentive :)
But when I do one of those, I'm often using tech that I'm trying to learn. In this case, more Polymer, JS modules (and some webpack), and Mongoose.
Hi John, thanks for the AMA.
As you are a frontend developer, I wanted to ask you this.
What do you think, about the latest trend in the frontend frameworks, namely angular, react and Vue JS.
Are they really necessary, if yes, what use cases do they solve. Also, how relevant is jquery these days.
Thanks again.
Regards,
Raghavendra Gautam B.
Let me handle the last one first. I love(d) jQuery, it was wonderful, however, it's time is past. The things it offered: more uniformity of function calls across browsers, some fixes to areas where a particular browser lacked a feature it could polyfill, promises, wrapping for XMLHttpRequest, etc. have all been addressed by browser makers over time (for example, better browser standards, ES2015, and fetch). I don't know anybody who starts a new project and frets about which version of jQuery to use nor do they add it as their very first file in the project, as they once would have. It's obsolete.
I bring all of that up because I feel like the underpinnings of AngularJS, Angular, React, and Vue.js are likewise obsolete. They are working hard to emulate the idea of creating custom elements and add support for them to your browser, Angular even tries to do some of what the Shadow DOM does, but it's already there! Chrome and Safari (both desktop and mobile flavors) support Custom Elements and Shadow DOM. Opera does too. Firefox has it in active development and Edge will inevitably have to follow suit. So, when every browser has support for it near the end of 2018 (maybe Edge still needs the polyfill for a brief period), why start with something that is slower and devoting a significant amount of code to trying to do something the browser already does and better.
What I think makes a lot more sense is for all of these libraries to follow the Node.js model. Nobody says, "Oh man, I so love developing in raw Node.js to build my servers!" They enjoy the fact that they can start a project simply and call on 700k bits of middleware to give them everything they might need from logging to blockchains and from data storage to sockets.
Custom Elements does not define anything about how you map strings in the HTML attributes to variables (binding in other words), nor how you render your components, nor how (and if) you map between attributes and properties on your elements. So that's where all of these projects can jump in to fill those gaps in their own ways with small pieces of code that still feel like and work like Angular or React or Vue, but leave some of the basic functionality to the browser where it belongs. Polymer has done this in the past but is really doubling down on it with their new LitElement. The code for that middleware is just 5k but it gets you templating and attribute/property handling. You could easily get off-the-shelf components out of a catalog that used LitElement and feel comfortable including them in your application even if you're using some other thing for your own components.
This is the vision I have for future web development. Me being able to draw from a large set of common components that work well and which I can mix and match with what I use day-to-day. Today, you're generally only Angular or only React or whatever.
Thank you for the detailed reply John. You've cleared a lot of doubts Ive had for some time.
Hey John! 31 years as a professional developer is impressive. I have been at it for 10 years. I only want to ask how you feel about it as a long term commitment. Does development capability decrease with time? Is it worth sticking to development only if you enjoy it and not move on to a managerial position with less on-hands coding?
I don't think my development capability has decreased with time. If anything, the tools and libraries have allowed me to go quicker than ever and to experiment more (often via refactoring the same thing multiple times to improve it).
I can't speak for anyone else but me. But for me, it's worth not changing. I'm still doing what I enjoy and in many ways enjoying it more today than a long time ago. I would not enjoy being in management, I just wouldn't. It seems like a huge chore to me and it would take away the thing I love.
I can relate to this so much "I would not enjoy being in management, I just wouldn't.". I am just worried that, with time the number of opportunities get limited as you get more experienced, if the local industry does not have large scale projects. Large enough to require a dedicated solution architect or a very experienced professional.
You're right. You could find yourself capped in salary/advancement (though that could also happen in management as well). In a case like that you might find that you have to become an entrepreneur and do your own thing, move to another market, or try to find remote work.
Remote work used to be the exception though it seems like more and more places are doing it at least part of the time now and some notable companies are entirely distributed.
Hi! hey I have some questions:
1 - Have you ever build personal projects or your own startups? What important lessons do you have from them that you may share with the ones that are starting?
2 - How do you make for keep studying while working and having a life?
3 - From your experience and the things you see that are currently moving, what things should we put more attention on general software development? (independently the kind of development, I believe there are things that may shape the current present and future).
I have many personal projects (you can see some here: github.com/JohnMunsch and here: gitlab.com/JohnMunsch). Some are also online at: jscrate.com, paperquik.com, madgameslab.com, and regrettable.tk/ (obviously some of those need some love to look better or be more complete). I also did a couple of video courses for Packt Publishing: packtpub.com/books/info/authors/jo...
In addition I was part of a startup, a loooonngg time ago, called Select Payment Processing. It was purchased around 2004 by another company.
The other notable project some of you might have encountered is GameDev.net. I was one of the founders back in the late 90's. However, lots of other people put way more work into that one than I did.
One of the things that people tend to forget about when they think about older developers is that we're often empty nest. My last kiddo left and went off to college five years ago. I have my work and my time with my wife and aside from that I can do a lot more experimenting than I could when I was 33 and had a small child. Sure, 33 year old me is younger, but he has a ton of commitments. I don't :) I see this regularly with my much younger co-workers. Often I've tried out stuff before they have and have put more time in with the interesting stuff than they can spare.
We need to find a way to stop building much the same things in multiple languages. I know that's a tough thing to ask for, but if it can be accomplished, the payoff is huge. With Web Components we may start to see some visual components that get some wide reuse, but what would be really awesome is if the 700,000 packages in the Node Package Manager were available more broadly. Instead, look at C++, Node.js, Python, Ruby, etc. How many bits of software got reimplemented for each of those? And how many did not and are still unavailable to one or more of them.
I read a book a long time ago called Object Oriented Programming: An Evolutionary Approach. In it the author was lamenting that he could go pull any IC chip he wanted off the shelf and plug it into something he was building, complete with an attendant set of documentation that fully described it, not only the in and out of the pins, but also characteristics like how much electricity it needed at different times and how hot it was likely to get. But there was no equivalent software IC with complete documentation that was compatible with a variety of languages and which described how much memory it needed under different circumstances nor how fast/slow it was. And this was a book written in 1986! Nothing with regard to that has really changed in 30 years.
Occasionally you see languages that start from another language and thus are able to call functions written in that other language. For example Elm can use JavaScript I believe. But Erlang and Ruby or C++ and Java? Where is there a single common software library format for all of us?
Hello John,
regarding career evolution my view on this currently is that we have those :
What have you experienced/seen that could be considered the evolution of the role of a senior developer that is not management related?
Or put another way what are the next roles after senior dev aside from management?
As I understand it, some companies like Intel have had roles for people who were purely researchers and there to teach and inspire and think about "the big picture." However, I think those are unusual roles and are usually reserved for people who made some huge contribution like the creation of a widely used language or hardware invention.
I'm told where I am now that there is such a thing as an "Enterprise Architect" which would be like my current role but looking at problems across the company and how we could create new software or adapt existing software to help that. That would be a different role for me and if I get it I would welcome that because I think it would allow me to contribute more.
But rather than that being a common thing, I think that's actually pretty unusual in my experience. Also, it's not a job I actually have yet :)
How long have you been doing front-end development in particular? How do you think that job title has evolved over time?
I've only been doing front-end for the last seven years. When I first started there was "Web 2.0" and people were definitely starting to think in terms of building apps which didn't do a constant request-response cycle back and forth to the server for every minor thing a user might do. But the software didn't support you very well for building that. jQuery plus various libraries was no substitute for what modern frameworks do.
So when my boss at the time asked me to figure out how to build a replacement for a piece of software the customers used that had a front-end completely separate from the back-end (which would be used only as an API) it seemed formidable. I didn't know JavaScript well, had not used jQuery, and had really only used Java the previous 10 years. I briefly considered suggesting Google Web Toolkit but it just seemed like it would end up creating as many problems as it solved. We ended up using Backbone.js, jQuery, Underscore.js, Handlebars, and a sprinkling of other libraries to do various things. There just weren't any off-the-shelf solutions that worked well for building this kind of thing. It worked, but the final results tended to be something where you could tell who had written every page of the app and the skill level of every one of them.
By 2013 however, I changed jobs and was asked to pick technologies and I was able to have a bake-off between AngularJS and Ember.js to see which one would work well. So choices were starting to appear and they definitely made things like memory management as you changed routes much easier.
And now :) Well, there are a few choices out there. However, I strongly believe the browser has stepped up to become what should be the focus for most developers. Web Components are an excellent technology in that they're easy to use and completely agnostic in implementation. When paired with some middleware like Polymer or their new LitElement, you can adjust the actual development to your personal taste (including making use of stuff like JSX if that was your thing).
What's your approach to such a bake-off? What steps do you take and what do you look for?
The approach, as such, was to find a small project and build it using both libraries. You can actually see the AngularJS version of that build over here (it proved to be a very popular bit of open source for me): github.com/JohnMunsch/airquotes
Note: Keep in mind, most of that code is from 2013 :)
For me it was all about how easy it was to learn enough to build a specific thing (the project was from a third party so I didn't get to pick it; that was actually a plus because I couldn't tailor the choice to what was easy or worked well with a particular framework). I also wanted to see how comfortable I was with the final finished product.
Did it do what I wanted without a lot of compromises and could I read the final finished product and understand it? Furthermore, could I explain what I did to others?
Hello John, how do you communicate with people who do not understand programming, I'm going through the challenge of how to estimate the time I'll spend on one task and announce progress to other departments?
Hey, John! Really simple one to start haha - With so many years under your belt I imagine it's changed quite a few times but what stack do you work with in your current day to day? And do you still find joy in building side projects/toys or has it become somewhat of a meal ticket? Awesome you're doing this!
I've been doing AngularJS for the past few years with Redux and TypeScript in the mix as well. We recently changed from Gulp to webpack and the handwriting is on the wall for the lifespan of AngularJS so we're looking at what to transition to for the next five years. Angular is one possibility; though I did a video course on it for Packt Publishing and truthfully I didn't like it very much. I felt like all the things it was trying to do were rapidly being added to the browser and I didn't need Angular's wrapper for it. Another, IMHO better, solution would be Web Components possibly with Polymer, but I worry that's too big a transition from what we've been doing.
I still love, love, love development. People cringe at how fast moving it is now but I don't mind at all because it has all gotten so easy! It took forever to build anything in the old days because we didn't have free access to wonderful tools, cheap on-the-fly servers, or videos to teach us everything in no time. That's all made it lots of fun to do side projects like paperquik.com or jscrate.com or regrettable.tk
I could quit my job tomorrow but there's no way I'd stop doing software for fun.
Hi John ! Nice talking to a veteran . Got 2 questions ?
1 - What do you think about remote works , remote job plateform ?
2- How to find job as a non degree Software Developer ? Self taught ?
Bonus : 3- Does it worth working for big company ? or creating its personal business ?
Thanks for answering.
Having been in the industry for so long and now working in web development, I was wondering what are your thoughts about where the web is going to be in 5, 10, 20 years? Will front-end developers, and web developers, in general, still stay in such a high demand? I feel like as the tools get better, it becomes more and more feasible to create websites (simple ones, for now, perhaps complex in the future) with almost no programming experience. I know it's impossible to answer but it would be interesting to hear your take on that.
I'm not sure where I stand on the statement about programming experience. I still think you need quite a bit and will for quite a while in the future. However, with that said, I'm just astonished how much a single person can accomplish in a given unit of time today vs 5, 10, 20 years ago. I am so much more productive and I think others are as well. A hammer is a force multiplier that helps you drive a single nail, but we've moved on to nail-guns and concrete nailers that shoot cartridges). You can go from an idea to a crude vision of a small site in a couple of days if you can devote yourself to it or a couple of weeks if all you have is an hour or two each evening.
What I think you'll see is more and more specialization. At the beginning of my career you were expected to be much more of what we call "full stack" than what is expected today. I'm still full stack on my hobby projects but in my day to day work I focus hard on web development. I hear sometimes about experts who know all about how to integrate Google Maps or Salesforce into a project. AWS is also clearly becoming something of a specialization. So why would that kind of specialization not become part of the front-end as well? Some developers may focus on the communications between the front and back-ends, charting and visualization building, the handling of data on the front-end, the building of components, or just the layout and appearance of the page.
hello john!
do you consider java still relevant in web dev?
if you had to choose between front end and back end, which one would you choose and why?
what are your thoughts about javascript?. I mean, what things you love/hate about js
I've been at it about the same amount of time although I'm a little bit older, having switched careers in the 80's. I've certainly followed a different path, mainly winding my way through the corporate IT world for the past 25 years or so.
One of the interesting questions you've been asked is about why you didn't move into management. My answer is that I would have stayed on the career path I was on in the early 80's if I had wanted to do that. I've had some opportunities to move in a management direction but I turned them down.
What are the common mistakes done by developers early in their career? I have just started with development how can I learn efficiently? Most of the time I get stuck due to bugs....How can I avoid that?
I don't know if it's what you're looking for, but I consider it a common mistake to take your work home with you. So many people never seem to have developed the habit of stopping work at the end of the day and putting it out of their mind. I don't think it's a good idea to work late hours, weekends, or fret about your job outside of work hours. If you want to devote time to coding still, do so, but pick a project of your own.
As for learning efficiently. I find videos work well for me to give me a quick intro to something (either on YouTube, commercial like Wes Bos, or a service like egghead.io) and then I just have to build to learn. For me there's no substitute for using a given library/language/framework.
I still get stuck on bugs, though I've developed a lot of expertise in how to find them so I can often get unstuck faster :) You don't say what language/environment you use, but in my case for example, every minute spent learning about what the Chrome and Firefox Dev Tools can do is a minute well spent because it ends up saving me 20 more minutes at some point later.
Hi John, I don't know if you check here yet or not, but if yes, please give me an advice.
I am an amateur back-end developer, I started programming by self-training with an unrelated university degree. I'm 35 and I'm working as a developer for about 7 years with some experience with C# and Java for different companies. But after all the years now I realized that I'm not professional yet and I am still evaluated as a junior developer. I know that all of my knowledge is superficial. Seems my work experience is not 7 years, it's 2 years.
I never could deepen my knowledge because I always had to work and make money for my family and in this way, I was just doing simple things, and after a while, I realized that I could not make any progress in terms of my career and even financially.
Now I want to move forward, but I don't know how and I don't know the path. I'm confused and frustrated.
For example for Java, should I start to review the Java Core and continue with other aspects? What about the professional experience that I don't have.
I will be so grateful if you can guide me in this.
Yes, I am still here, [plug] I just posted yesterday about some of my video series :) [end-plug].
I've always found that I got knowledge which was more than just surface level from one of three ways:
Is there any way you could do something like mentor someone else (helping), offer to help somebody get rid of a problem, or get tasked with a project that corresponds to something you really like doing?
Those might help. The only other thing I can suggest, and this is what I usually suggest to people who want to learn something, is there a project that you feel passionate about building but which you can also use as a way to fill in some of the knowledge you don't feel like you have now? Because only something you really want is going to help you power through the tough parts.
As for the specifics of Java and what you feel is your missing professional knowledge, part of me feels like this is partly self confidence, part may be realistic, and part may be self expectations which might be a little too high. If you're looking to change things, try interviewing for a few jobs and see how others view you. Hand out a resume and get some feedback. We hired someone last year just because we liked how keen he seemed to be to learn and grow. He didn't have great knowledge or experience but we felt his enthusiasm could help a lot and we're really happy with the choice we made.
Hi John,
You are in the industry for over 30 years. Lots of things have changed, but what really interests me - what stayed the same?
People, all people, are really terrible at estimating things. That has never changed.
Is that too flippant of an answer?
That's a good answer :) But if you think about more things, I'd love to hear them :)
What language should i learn now? after Python. as in which language is likely to dominate all the areas in Computer world in next 5-10 years?!
This is going to sound massively self-serving, but JavaScript. It's ubiquitous. You can use on the front or back-end. In fact, today, it's pretty much your only front-end choice.
But I would hold that prediction to just five years. Java had an impressive run for about a decade there. I think JavaScript is about five years into its heyday. Will it manage to still be tops after another five years? Maybe, maybe not.
How would you rate Ruby on Rails in 2018?
I cannot speak to how it has changed vs. when I was using it back in 2011 except in mind share. It has definitely lost the buzz it had at one point. However, not every good tool has to be the most popular for you to build good things with it.
Note: Edited to reflect the fact that I last used Ruby on Rails in 2011, not 2013.
I'm facing a problem from last 4 days, I'm not able to install lxml module for python, even through Terminal?!
Well, to be fair, this does say "Ask Me Anything". However, I've never used Python and I'm going to be unable to help you.
i Figured it out, anyway thanks
Would you say that ageism is an issue in the industry and, if so, have you felt the impact of it at all in your career?
It definitely seems to be an issue and I've felt it at the point of hiring. When I was looking for a job in 2011 I interviewed at one company and had, I thought, a series of very good in person interviews with people at a location in the DFW area. They seemed very pleased with my experience and with some of the specific technologies I had used which they needed help with.
However, I was told first that I would likely get an offer within the next couple of days and then suddenly that I needed to do an additional phone interview with someone in CA. I did that interview and I was killing every question the guy had, but I said something about floppies or who knows what in one of my answers and the interviewer came back with, "How OLD are you?!?" After that he wrapped it up in two minutes and I was told by someone who worked inside the company that they were overruled on hiring me.
It was shocking and pretty clear cut ageism. However, did I want to spend my time trying to put together a lawsuit against a startup that might not even be in existence by the time it came to trial or focus on finding a good job where I wasn't working for an asshole. Some would say I should have tried the former just to prevent somebody else from getting the same treatment. I chose to ignore it and move on. I found a good job a very short time thereafter and it's actually the one that shifted me from Java to JavaScript and back-end to front-end.
Very similar to what I encountered recently interviewing with the local "cool" tech start-ups here in the Atlanta metro area. Great phone interviews and coding tests but when they saw the gray hair and wrinkles in person I was shown the door quickly.
If your still game to answer another question, What was your first language? :)
Not surprisingly for when I grew up, BASIC. When you were an amateur programmer in that day and age you really didn't have access to much except for that.
But then in school we were first exposed C if I recall correctly. I actually can't remember anymore. I went to Rice and we did at least some of: C, Modula-2, Prolog, Lisp, Motorola 68000 Assembly, and probably some others I can no longer remember.
Nice, I've been messing around with Lisp. Not sure i'm confident enough in myself to get into basic. Pretty awesome and thanks for the answer!
John, just one question 🙂
Is there any one thing that you have felt makes a difference about software development as a profession compared to others? If yes, then what is it?
That's a tough one. It's creation oriented but so are architect and builder. It's nice though that you get to do both the design and construction in one job.
But if you're looking for something different about it I guess it's that it has become so pervasive across so many industries and hobbies, especially since the coming of the Internet. Thus, if you have something else you're really interested in that isn't programming (for example, medicine, special effects for film, industrial production, astronomy, the stock market, etc.), it's possible to find jobs which will combine your love of software and that other world as well.
But maybe if I were a lawyer I would think the same thing. Would I go home at the end of the day and do "law"? Would it be both my vocation and avocation as software development is? Hmm. Interesting question you've raised.
I am completing just 2.5 years in the industry as of now. Actually I have felt that the work culture of software development, most importantly the enthusiasm to work together on creating something, mixing work and play etc...one cannot find such things in some other regular job like that of a bank employee or even a civil engineer.
I was just wondering whether you have observed these things and maybe you might have noticed some reason for software development to have this kind of work culture. 🙂
I hate to break it to you man, the answer to this one isn't that the job is really the best ever. It's that you, like me, are very suited to this particular job :)
It feels great because it's the right one for you. There are others you could put into the same thing and they would feel confused, bored, overwhelmed, or a mix of other negative things.
Hi John ,I'm a DOTNET developer from India, and want to transition in to working with JavaScript frameworks like angular and React.At my workplace there currently no such opputunity to work in these frameworks. Any suggestion on how to learn new things in this scenario.
Pick a project and build it. The trick there is that it must be something you care enough about to carry through to the end. That's the hard part. You can get 80% of the way on a lot of projects easily. Or at least it seems like 80%. The other 20% can end up taking just as long and since it's often the least interesting part to you, it can be a slog to get through that to something you can deploy and share.
If that doesn't work for you, and I'm sure it won't for everyone, I would look for a chance to try and teach it (perhaps through a local school or create some videos to share online). Anything I have ever had to teach anyone forced me to learn it better than if I had learned it any other way because I had to find examples, counter-examples, and understand all of the parts of something where I might have otherwise skipped parts if I didn't think I would ever need them.
Hi John,
Thanks for making this post. Any other similarly experienced devs please feel free to chime in!
Some context before my questions:
I have the opportunity to work on a project with a lead who has 30+ years experience with CS & math degrees. He prefers to avoid libraries, tools, modern IDEs etc. Anything that modifies the code we would write is out (Babel, Prettier code formatter etc). All valid JavaScript is allowed, no coding standards are imposed. No git branches because he doesn't like the possibility of merge conflicts. jQuery is embedded and won't be going anywhere because he likes its utility. JS files are loaded via script tags without any kind of modules. Functions are hundreds of lines long. Many suggestions of making improvements to the way things are done have been met with strong resistance. I think there is value to working on the project because I would have to build everything from scratch w/out crutches and it's an interesting domain. However, I am concerned about the opportunity costs in terms of time I could spend learning more modern dev practices. I'm also concerned that getting quality 1:1 time with a person that espouses the 'sink-or-swim' school of programming might be very difficult.
Would you view the legacy nature of the project and entrenched attitudes of the lead as red flags or opportunities?
What is a good balance of knowing fundamentals/legacy vs. modern, marketable practices?
What advice would you give to younger programmers on how to interact with programmers of your generation who are set in their ways?
I hate to sell out a fellow developer but almost everything you described above doesn't seem like an opportunity to me, it seems like a whole series of red flags. About the only thing your lead and I agree on is no great love of Babel/TypeScript (though I use TS at work, I use straight ES6 code on my own personal projects outside of work). In my case however, it's just because I don't like a system with a lot of tooling and all of the modern browsers (Note: I'm excluding IE11 from that designation) handle ES6 just fine already.
It really doesn't seem to be about 'sink-or-swim' as much as it seems to be about discomforting an individual from his/her personal preferences. I'm going to come back to that in question 3.
Tough to say on that. You really do need to know your fundamentals, JavaScript, some kind of component system (Web Components, Angular, React, Vue), etc. But I think it is also super valuable to understand how to build a system as a whole. If someone asks you to explain how the various component systems differ or why someone might use Redux or even what concepts like dependency injection, GraphQL, or continuous integration are, then I think you should be able to do that. If someone asks you a question, do you understand it so well that you can answer it simply even if they are not technical at all.
In my case, my most marketable skill for quite some time has proven to be the ability to look at somebody and say convincingly, "I can fix your problems." Whether those problems were with performance, adding new features or fix bugs in an existing codebase, rewrite a codebase to make it modern, or the ability to get best practices of version control and continuous integration into place. I can listen to the problems they have and explain some of what they might need to fix it and tell a believable story about how I've helped others solve those problems in the past.
Let me extend that a little bit for you, because there are younger developers who at present think that webpack + TypeScript + React is literally the only way to build anything. They are as unwilling to consider any other tech because it would require them to learn something new and to consider that maybe some of the stuff they already know is actually starting to fade. It's not an age thing, it's a mindset.
Change is going to happen. Your favorite tools aren't going to be the favorites forever, it's a given. jQuery was king, it's not anymore, AngularJS, ditto. React is currently king but tomorrow it may not be. Ask them a simple question, "What is your current plan for change? What do you plan to introduce to simplify coding over the next few years, what do you plan to phase out, and how do you plan to acquire new talent with a good tech stack that solves our problems while still moving forward to well supported solutions?"
If you can lay out a convincing set of reasons why adoption of something new could make things better while not imposing a lot of tech debt and it would give the project a longer/better lifespan and they aren't willing to even consider it, do you want to work with that person or those people? If they can't articulate some kind of plan and they won't listen to yours, that is a big red flag.
Are we making the world a better place? (Are we heading in the right direction?)
Wow.
If I take that literally, I'm not sure we are making the world a better place. I can point to lots of examples of the Internet and the web both benefiting us as a species (I personally met my wife online 20 years ago, so I'm pretty happy with that :)) as well as hurting us (neo-Nazi's enabled to create echo chambers where they think they're just fine).
However, if you meant, are we making programming better? Oh lord yes. Fewer people can build more in less time and share it with a huge part of the world's population.
I initially meant literally. We set out to have computers and (and software) make things easier for us. In a lot of cases we have made things easier. But as you may every well be aware, with every problem we solve we introduce different kind of problems. Like your example of the Internet. We made it easier for all kinds of people to communicate with each other about anything. But this also exposed everybody to undesirable activity from certain groups. The internet allowed everybody to start their community, but it also allowed large corporation to create powerful control structures. ... But at the bottom line, are we going in the plus, minus, or sort of standing still.
But on the software making angle there is also an interesting point. A bunch of years ago I read Fred Brooks' book "The Mythical Man-Month". (Actually, it was the 20th anniversary release from 1995). In it are observations of pre-1975 software development which I still see around, often unchanged. So in your 30 professional years tools have become more powerful, versatile, and easier to use. But are we becoming better at creating solutions for problems? Are we becoming better for the people involved in creating these solutions? Are Edward Yourdon's observations in "Death march" more and more a thing of the past.
From your perspective of course. You've probably seen and fought your battles.
That's a super difficult question to answer. One I'm tempted to say would fall into the domain of a professional moralist.
I feel like all I can say is that we've made it "different". I've seen pre-computer to post-computer, pre-Internet to post-Internet, and even pre-WWW to post-WWW (too many people confuse those, but lots of us used the Internet long before the World Wide Web showed up). I prefer the latter.
I love that I can make something and share it with everybody. The fact that somebody else can try to be an asshole to everybody simultaneously doesn't ruin it for me. I'm enough of an optimist to feel like the relationships I've made and the communities I've been lucky enough to be part of haven't been outweighed by the bad stuff that has come along for the ride.
Now, I'm not stupid, I know that I'm really lucky. I'm white and male and well educated. I don't come from a family with a lot of money, but I've had more advantages than I can count. So the fact that my experience has largely been one way doesn't mean that others haven't had exactly the opposite. But I guess I hope (perhaps naively) that most people are getting the better experience rather than the worse.
It requires quite much time to write a program, this can take years. I know that you code by parts, but how do you know if you are going the right way without running it(or do you?)? I am not really aware of this kind of things, could you please, tell about it?
Have you been able to sustain a long term relationship?
My first marriage was short lived (and the reasons it did not last were unrelated to work). But my second marriage will be 18 years this year and looks good to last.
Did you ever use DOS extenders, and if so, which was your favorite one?
Ha! Old school!
We used to use QEMM and I think the last version we used much was QEMM 386 if I remember correctly. I think that's the one where they added switching between multiple apps and we all wanted that.
However, it was unstable and ran up against Tandy/Radio Shack (where I worked at the time) getting early releases of a new version of Windows. Version 3.0 took a product most of us hardly cared about and made it not suck. We had all switched pretty fast, even before it shipped as a product.
how to make money online as a python Developer?
That's a tough one. I would have said Python had it's chance and blew it until it's recent resurgence as the language of choice for AI work.
I really don't think it's a good bet for building websites. But if you love it, embrace TensorFlow man.
Hi John!
I am currently studying in first year college.I have studied C++ this year.I want to ask whether should I learn python or Java next.Please can you throw some light on the same.
Regards
Rohan
How are you?
Is there any concept that was suppose to be new, but when you learn it. It makes you think something like 'We already know that', 'This is not new', 'They are just labeling old ideas as new ones'.
I thought about this one overnight and I really couldn't think of anything. The Internet was not new when the World Wide Web came along, it had been around many years, but I think that was more misunderstanding by people rather than anyone trying to sell something as new which wasn't. I generally don't see people trying to sell an old idea as new that often.
I think the thing that has stuck with me were the good ideas that have just been forgotten. I don't get that. And I'm going to point to one specific example for that: HyperCard
It was an easy entry path for people to learn development using a simple paradigm of cards with code associated with them. It's an obvious parallel to web development and a modern tool could be made which would build upon things like browsers, components, and JavaScript to make a new version. But there's really no comparable tool which offers a graphical editor to lay out pages and then wire them up via a language that we once got from HyperCard or Visual Basic. To me, it seems like there's an unserved market there of people who would throw together some simple app they needed if they had a friendlier tool.
Thank you for sharing your thoughts.
I did a little reasearch and I found a video about HyperCard in case anyone wants to understand what is it here is the link of a video contain on wikipedia.
archive.org/details/CC501_hypercard
John: I am an old PL/1 and FORTRAN programmer; have not coded since 1985; would like to get back into it. Do you have suggestions as of how to go about doing that?
I'm afraid my advice for this would be similar to my advice to Ankit Puthran about learning Angular or React. For me it would come down to either building a project or teaching others. That's what works for me, but it might not for you.
In your case though, you didn't say what kind of thing you're looking to get into. Your choice of language and project is going to vary a lot depending upon whether you're looking to get into game development, AI, or web development. If you can share more I, or someone else here, might have better suggestions.
Did you feel boring some time developing? What's the cause and how afford it?
Yes. Inevitably. One thing that can lead to that is a project that you don't believe in. If you think it's unlikely to get used or succeed, it's hard to pour the hours in thinking that it's a waste of time. The times when I've been in that situation though, the only thing that would have helped would have been to change to a different job. So that's an extreme reaction unless you're bored for a long time.
The other way I've gotten bored is the most obvious way, repetition. Never changing the variables in the system. If you're fixing the same code, making only minor changes, using the same tools and you're in an environment where even upgrading to new versions of the existing language are resisted (I've been there) then it's inevitable that it gets boring. Come to think of it, that time I did change jobs. So, if it looks like it's going to be a temporary thing to be bored, see if you can't find a fun project at home to help offset it. But if it's just boring because you're stuck at a boring place and its clearly not going to change... You change. Change jobs.
What do you think are the skills any programmer/computer scientist must have and won't get depreciated ?