Good to great
(for software engineers)
John Gialamas
November 2021
info@prosvation.gr
ggialamas@uth.gr
Who Am I
i.gialamas@aegeancollege.gr
giannis.gialamas@upiria.com
info@prosvation.gr
igialamas@sch.gr
ggialamas@uth.grs@uth.gr
Co-founder
Tutor
Operations Manager
Proxy Product Owner
Rapidly growing software ecosystem
Universities
Aspiring engineers
Great companies
The "Software Engineering Book of Knowledge"
(Bourque et al. 2014),
attempts to enumerate everything a software engineer can and should know to be competent
Competence
- Skills
- Knowledge
- Attitude
Research on software engineering processes also implies skills required by engineers.
Various guidelines, methods, and manifestos,
suggest many specific ways of
working,
planning,
and deciding
that are essential for productive teamwork.
Ask a senior Developer or an HR Manager.
"Are some attributes more important than others?"
Attributes of great Software engineers
Attributes of great Software engineers
In general, the most important are:
internal personality traits,
ability to engage with others,
technical capabilities,
and decision-making skills
Not just writing code.
-
conflict resolution
-
bug triaging
-
information seeking
-
Mentoring
-
Thinking out of the box
(Research shows that PhD holders have negative relationships with
asking for help and challenging others to improve)
Do not be afraid to ask for help!
Find your mentor.
Join Communities
Offer help!
Be a mentor.
As Mr Kakarontzas said, PairProgramming is very effective
Can you find a solution to any problem at any time?
Ask for Requirements
Learn to say "No"
What Language?
Try many languages/frameworks...
and then
find one what makes you passionate!
(or the latest?)
The internet has massively broadened the possible space of software developers' careers.
But this broadened the competition too.
What is the market looking for?
SPECIFIC KNOWLEDGE
(your UVP)
"What you do during your breaks, should be your thing"
-Austin Kleon
How to obtain it?
apprenticeships
side hustles
pet projects
intrapreneurship
(not from schools)
Experience
How many hours?
1000?
10000?
100000?
Analytical Thinking
Descriptive vs Predictive vs Prescriptive
Learnability
Programming is 99% self-taught
Learnability
Practice with friends’ debugging. It exposes you to someone else’s coding style. Learn something from everyone.
Learnability
Read a lot of Good code. And then read some spaghetti code. Learn from the differences
Learnability
Always Up to date!!
(What is new and hot?)
Digital knowledge!
Subscribe to newsletters and tools for informing yourself
Read some books.
UnLearnability
The things that you used to do five years ago that made you
successful doesn’t matter anymore.
(in fact, they can get you into trouble right now)
Deal with two (or more) sets of customers/POs at once?
Communication skills are needed.
Empathy is also needed.
Respect the business Decisions.
Always try to advise though.
Speak their Language.
(they pay you, and they will pay for your ability to attract funds)
STAKEHOLDER ALIGNMENT
This way everyone will know what the others are working on.
Transparency is crucial!!!
(Also, do not take your work at home. especially on the weekends!)
Stakeholders must participate, so they feel invested and committed to the strategy.
Very good at one
and decent knowledge on some other fields
Malcolm Gladwell, Outliers
Tooling
You cannot be great if you are constantly re-inventing the wheel or using out of date
tools/processes
I would never hire someone who:
Do not become any of these
Theorist Developer
Can tell about any framework or language, but he cannot use it in real project conditions
Stackoverflow Developer.
Just copy paste.
No knowledge/investigating why this works.
No problem solving ability.
Perfecionist Developer
he/she won’t start any task before this is completely specified in every little detail
Overconfident Developer.
give them any task and he will respond that he can EASILY implement it
Business Logic is good, but...
Businessman Developer
By gaining some theoritical BUSINESS knowledge (mainly from books), he starts thinking about creating his own startup/venture.
Manager Developer
When someones fails as a startupper, and returns to work as a developer.
He cannot work with an engineering mindset anymore.
Trouble maker.
He needs to solve problems that doesn't exist.
Probably, he tries to create some, in order to be a problem solver.
What is bad for the hive, is bad for the bee.
Fix only what is broken!
Some more "rules"
Long variables, easy to read.
Self-documented code.
No single letter variable.
Early exit (when you know there is nothing more you can do).
Do not overcomplicate. If it is easy to understand, go with it.
Some more "rules"
Do not overoptimise. The real scenarios are not in front of you. Fixing something that isn’t broken, only makes you spend more time on it.
Be strict with your code and tolerant with others code.
Write code for yourself but for 5years ago.
(Would you understand it 5 years ago?)
Test Test Test!
(Experiment experiment experiment)
Scalable Code
Deep work.
Be distraction free === Notification-free
Avoid Complexity
the greatest impediment to a software company’s growth and profitability.
Thank you!
ggialamas@uth.gr
You can see the whole presentation here
https://bit.ly/3oQV3uU
info@prosvation.gr
What distinguishes great engineers from ordinary ones
By Any App
What distinguishes great engineers from ordinary ones
- 567