Alexander Afanasyev, a full stack developer will share his experience in an exclusive interview.
The conversation is a bit lengthy because it is very informative, but is interesting as well. Enjoy!
A photo of Alexander Afanasyev with Martijn Pieters taken during PyCon 2016 in Portland.
Alexander Afanasyev–right and Martijn Pieters-left
GODSON: Good day Alexander Afanasyev, it’s a pleasure to have you here on cool python codes.
ALEXANDER AFANASYEV: Hi Godson, Thank you for interviewing me.
GODSON: Could you please kindly tell us about yourself like your full name, hobbies, nationality, education etc
ALEXANDER AFANASYEV: Sure!
My name is Alexander Afanasyev, I was born in Kazakhstan, moved to Russia when I was 15, moved to the United States more than 3 years ago, currently living with my wife and wonderful 5-year old daughter in New York.
I’m a full stack developer with a passion for clean code, great software, and open source.
My background is in Radiophysics and Electronics, but I’ve been working in software development for about 10 years now.
I’ve been developing, testing and supporting software in different types of businesses – electric energy, finance, transportation, healthcare, and insurance.
Currently, I’m working for a company called Equian, I’m a part of a team focusing on building software applications to make the insurance claim processing space more transparent.
Aside from daily work, I’m a long time contributor to StackOverflow and GitHub.
And, it looks like my physics background finally starts to reveal itself pushing me into things like Internet of Things, home automation, robotics, space exploration, and astronomy.
GODSON: With a background in Radiophysics and Electronics, what made you go into Programming Alexander?
ALEXANDER AFANASYEV: Good question. Mostly that was simply a good luck – being in the right place at the right moment.
I was working on my 4-year’s course work with my science advisor when a graduate of our department called and asked if we had any interns who are willing to start working as a programmer in the city’s Electric Energy company.
I did take my chance even though combining studying with a full-time work was a challenging experience later on.
GODSON: For the sake of our readers, can you briefly describe who a stack developer is?
ALEXANDER AFANASYEV: For me, a full-stack developer is someone who is able to work on both the back-end and front-end sides of an application as well as in some cases able to work on the DevOps things if needed.
Kind of a jack-of-all-trades which, I think, generally is quite a valuable skill especially in small teams and startups where there can be a lot of role and task switching.
This kind of person does not necessarily (and often this is the case) have to be an expert in all of the areas of the “stack”.
GODSON: Can you tell us how you learned software development and how you could work very well with both front-end and back-end technologies?
Did you pay for online classes?
ALEXANDER AFANASYEV: I think one cannot talk about learning software development in the past tense. This is a continuous and never-ending process.
If you are constantly working on your programming skills and not letting them become rusty, improving your broad knowledge of technologies of the ecosystem you are working in, reevaluating the quality of your code over and over again, learning new techniques and methodologies etc, challenging yourself with new difficult problems, you are becoming a better developer.
Never stop learning – as simple as it sounds, yet it drives me every day.
In my case, I may say that I am a self-taught developer, but that would not be completely fair.
Even though I’ve been working hard on improving my skills, programming classes back in the university, things I’ve learned from my friends and teammates on different work and side projects, hard lessons learned during the real-world software development, things people do around the friendly and helpful Python community, contributors on StackOveflow, collaborating with other people on GitHub and many more other things were and are crucially important and valuable for me.
These are different pieces of a puzzle, of a unique path that every developer builds him- or herself.
And, I don’t even consider the things I do at work as actual work – I really enjoy doing things I do and I am always looking forward to jumping at the computer and write some code.
GODSON: You mentioned earlier about clean code. Can you please elaborate on it?
Does it really play a role in development?
ALEXANDER AFANASYEV: Absolutely, I’m glad you asked. As John Woods said long ago:
“Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live.”
It’s difficult to overstate the importance of writing readable and clean code. We, developers, write code for developers, for humans, not for computers.
The code should tell a story and tell a story in a clear and understandable fashion, it should follow a consistent style driven by the recommended guidelines of the language you are writing code in – for Python, this is PEP8 and the famous “Zen of Python”.
And, as the BDFL of the Python language, Guido Van Rossum noted:
“Code is read much more often than it is written.”
Keep this in mind every time you write code, think about someone, who does not know what your program does, would be reading your code – can he or she easily understand what is your code designed to do?
GODSON: Can you mention the programming languages you know and which is your favorite? And also, why is the language is your favorite?
ALEXANDER AFANASYEV: I’ve worked with different programming languages throughout my career.
It’s important to understand that this is in an essence just a tool, an instrument that one can use to solve a problem and, one can also, of course, misuse it like any other tool, like hitting your finger with a hammer or shoot yourself in the foot with a gun.
And, Python, being a dynamic language, will willingly let you do that if you are not careful enough.
The minute I’ve been introduced to Python, I was hooked. It’s the beauty of the language syntax, the rich standard library, the huge PyPI library of third-party packages for almost any problem one might have, the welcoming, friendly and helpful community, the conferences..all of that makes it more than just an instrument, more than a language to me. And, I will never know Python, I’ll just get more familiar with it.
GODSON: Can you tell us a little about your favorite project you have worked on?
ALEXANDER AFANASYEV: It’s difficult to pick a favorite one.
Probably, contributing to StackOverflow, if we can call it a project, could be one of my most favorite. It’s of course, endless and I do it on a day-to-day basis, but I really enjoy doing it.
It’s amazing how much can you learn by helping other people and looking at other contributors answers. And, it’s definitely addictive.
Check out Michael Kennedy’s “Python at StackOverflow” podcast with Martijn Pieters
GODSON: Which project was the most challenging for you and can you briefly narrate the ordeal?
ALEXANDER AFANASYEV: Probably one of the most challenging projects was the one where we were trying to fit a “schema-less” database to a classic relational database type problem.
We were working on a small online store for construction goods and had time and desire to try out something new and experiment with new technologies.
We’ve picked MongoDB, Tornado framework, talking to the database via the “Motor” Python to MongoDB async database driver, multiple Nginx instances and, if I remember correctly, Varnish as a caching layer.
The main challenge was keeping the data up-to-date – since there was no schema, we had to maintain the integrity and correctness of the data by having a variety of background celery tasks which required additional time to write and test.
Even though we gave up due to time constraints and switched to a more classical Django+PostgreSQL, the Tornado-based solution was blazingly fast and scalable.
And, overall it was a very good lesson learned – technology choices all come with pros and cons, it is often you have to sacrifice something in order to gain something else, there is no silver bullet and “ideal” framework.
GODSON: What are the basic knowledge I need to know before learning software development? Can you also recommend any good resource to learn software development?
ALEXANDER AFANASYEV: As someone with no computer science background, I don’t actually think there is something you have to know before diving into software development.
You need a right problem-solving mindset, be ready for challenges and, more importantly, failures; you will also need time and a lot of actual coding practice.
Of course, mathematics and related disciplines would definitely become handy along the way.
As far as sources, there are so many wonderful resources out there on the internet, but to name a few good places to start – Code Academy, Coursera, EdX, Udacity
GODSON: To be a full stack developer, which skills/programming languages do I have to learn?
ALEXANDER AFANASYEV: Sure. If we are talking about a full stack developer on and for the web, one should have experience with a quite broad set of technologies on the UI side, backend, databases, unit, integration and end-to-end UI testing, deployments, you name it.
Here is just one example way of thinking what could be needed for a full-stack developer (overall, the term “full stack developer” is very broad and it needs a context).
As for the databases, having experience with both classical RDBMS and NoSQL including document and key-value stores is quite important.
Being able to build, pack and deploy your applications is usually a must. On the API/backend side, if we are in the Python space, Django is surely the first that comes to mind, or a micro-, include the batteries yourself type of a framework, like Flask.
Even though experience with ORMs like SQLAlchemy is good, being able to write plain SQL, I would consider absolutely required.
I can go on, but you may get a better idea of what skills and requirements needed for a full-stack developer if you look into the “requirements” section of the job postings for the “full stack developers”
GODSON: How do you cope with work, contributing to StackOverflow and GitHub and also having time for your family?
ALEXANDER AFANASYEV: Great question. It’s not easy – it is a lot of context-switching, which is often time-consuming and sometimes can hurt productivity.
But having a good sense of time, prioritization, to-do lists, different “getting things done” techniques and, much more importantly, family and teammates who are always understandable and helpful makes things easier.
GODSON: Living in the big apple, the city that never sleeps, how does that affect you as a programmer? Do you like to code in the night or anytime in the day?
ALEXANDER AFANASYEV: Interesting question!
I should have probably noted that my job is about 90% remote, which allows me to change the places I work from – you can often find me in different coffee shops or cafes which are more or less convenient to work in (there is even a service that keeps tracks of this kind of places – https://workfrom.co/nyc).
Another great thing about living in NYC and being a developer is that there is a huge variety of meetup groups – one can basically go to one or more meetups on a single day every day of the week and since most of them offer free food and drinks, no monthly food expenses for you.
Okay, but seriously, this is a great way to expand your professional network, meet great people working in the industry, learn new things, broaden your knowledge or find your next project or job opportunity.
GODSON: Some programmers say you must be very good to contribute at StackOverflow and GitHub?
For someone who wants to become a full stack developer, it is important to gain experience with high-end JS frameworks like AngularJS and React (and keep your skills fresh – these libraries are being actively developed and changed), mainstream frameworks like, in case of Python, Django, Pyramid or Flask, look into common problems like social authentication, server push notifications, web sockets, pagination, payments, shopping carts, creating RESTful APIs etc.
ALEXANDER AFANASYEV: Good question. Here are some things that worked for me so far:
- Follow people who tweet about Python. For instance, I’ve learned so many things from Raymond Hettinger or David Beazley tweets, blog posts and talks.
- Listen to podcasts like Python Bytes, Talk Python to Me or podcast.__init__.
- Subscribe to specific Python or JS developer blogs.
- Go to local meetups or bigger conferences.
- Keep your project dependencies up-to-date and pay attention to what things are changing in the libraries you use.
- There is also this kind of StackOverflow weekly reports like Python SO weekly.
GODSON: Bash from Nigeria is interested to know what conditions should one decide to use node.js for backend, and how effective is it? Any help to his question?
It might not be the question about motivation only.
Make sure the conditions you are working in are convenient and is not the problem.
Changing the environment around you might help to get back on track – some random ideas: you may try things like standing desk, multiple displays, change the IDE you are working in, become more productive with your current IDE, working in headphones with music or without, work from a cafe or a co-working place, pair-programming, “Pomodoro” technique, TDD (test-driven development), documentation-driven development, switch tasks during the day more often, work on multiple different projects concurrently, go for a walk in between working, learn a new programming language, a new programming technique – different things help different people at different times.
Another thing is – you can get a code mentor (have not personally used that, though), that will help you get 1:1 help from an experienced developer. Might also help with motivation.
GODSON: In New York, what is the most sought after skill in full stack development?
GODSON: Between front-end and back-end, which of them do prefer working with more?
ALEXANDER AFANASYEV: This is what I like about being able to work on different parts/sides of a project – switching contexts and types of tasks is really something I absolutely enjoy.
ALEXANDER AFANASYEV: Thanks so much for the interview, Godson.
If this interview was informative, please kindly share or leave a comment.