# Technical Interview
**name: Antonio Ferraro**
My SQL server
NATO: Delphi, performance of maritime sensors, file based databank
4.5 year
Glans (NATO) - team of 4 persons
3 year manager - data links (positions of military, radio frequency)
C - JAVA 2006 - no framework from outside, web-based, radio, several European countries, full success, JIRA
in 2015 - move to Den Haag
2019 - 6 months for Lampiris, accounting, JAVA optimisation
IntelliJ, JIRA, gitlab, PostgresSQL
training and testing from NATO again
2020 - with Corona take a break
2020 - Vivid Consulting - Python, Data Science, courses in R (John Hopkins University)
VLIZ - EuroBIS - record of maritime observation, MySQL
_This document should not be followed like a script._
## Useful knowledge
* Python
* Flask
* OIDC
* SqlAlchemy
* Docker
* Git / GitHub
* GNU/Linux
## General Questions
* **ICEBREAKER**: Tabs or spaces?
>
> A silly question to put us all at ease.
* Are you comfortable with a junior engineer, or someone you consider a junior to yourself, reviewing pull requests that you submit?
>
> Antonio is a very experienced engineer (a long time in industry). How will he react to
> e.g. James asking him to make changes on a PR?
* Are you comfortable with open-source "bazaar" style development? What does this mean to you? How would you increase your comfort enough to tackle the project?
>
> The project he will work on has no requirements but will instead rely on communication with the
> scientist, Alex, and James. How does Antonio want to approach this?
* You mention that you spent most of your career in NATO SSSB program. Including in a leadership position.
* What was your greatest or proudest achievement there?
* Why did SSSB switch from C to Java?
* Why did you leave SSSB?
> I am especially curious why he left SSSB. Why they're no longer employing him as a consultant?
> What was his real level of involvement. Technical or managerial? Did he make technical decisions?
> On what did he make those technical decisions? Did he mentor people?
> Was he involved in writing production code or was he QA only?
* Have you worked in or would you be comfortable working in an "Agile" environment?
## Technical Questions
We can safely assume this candidate has basic Python knowledge.
* What version(s)/implementation(s) of Python do you have experience with?
>
> CPython? Pypy? Micropython? Cython?
> This question is for the interviewer, sets the stage for the remainder of the interview.
* If you see something that you don't recognise as Python, what do you do?
>
> Example, is the following code "correct" and if so, what does it do? If not, correct it.
```python
x: dict[str, int] = {'a': 1} | {'b': 2} # Python 3.0 type annotation, Python 3.9 dictionary union
if (y := x.get('b')) is not None: # Python 3.8 walrus operator
print(f"{y} {x.get('b')}") # Python 3.6 f-strings
```
> This question is a gauge of their experience with Python.
* Do you have experience with development in containers? Docker?
>
> This is a project specific question and does **not** disqualify someone
> with no experience. MSV is deployed with rudimentary docker and there
> is a development container.
> A good answer will elaborate on the pros/cons of development inside a
> containerised environment.
* What are your thoughts on _Test Driven Development_?
>
> Provides the interviewee with an open question for them to elaborate on
> a topic that greatly overlaps with their previous experience.
* You have some experience with GitLab and GitHub. How do you feel about the automation system these services provide?
>
> Again, overlapping with their previous experience and expertise.
> Opportunity for them to elaborate on their knowledge. How would they set it
> up? When should automation run? What should automation run (unit tests,
> integration tests, end-to-end tests)? Experience with CD? How much
> automation should be in deployment?
* Was "Eurobis-QC" the first "real" Python project you? What got you interested in Python?
>
> Gives the interviewee an opportunity to elaborate on their experience with
> Python. If they don't mention themselves ask about teaching their son.
* Which tool do you prefer to use for package management in Python projects?
>
> This gives us insight into his level of Python ecosystem knowledge. Does he
> use a package management tool? Is he familiar with Pip and Setuptools
> (used in Eurobis-qc)? Virtual environments? Pipenv? Poetry? Conda?
> Why does he prefer a tool?
> Would he be willing to use a different tool? Under what circumstances?
> Being opinionated can be a good thing.
* What are your thoughts on object-oriented programming in general, and specifically as it appears in Python? Do you prefer inheritance or composition?
>
> Very open question. Gives the candidate the opportunity to display their
> general knowledge of the topics (coming from Java) and their specific
> knowledge of Python. Also potentially shows their human character.
* How important is documentation to you? When should documentation be written? By / for whom?
>
> An important aspect to software development. Especially as a consultant.
> A good answer will emphasise the importance of documentation for "users"
> throughout the lifecycle. Look out for nuance.
* Could you contrast the ORMs you've used (Hibernate, Django, ?SqlAlchemy?)?
>
> Has he used a Python ORM?
> Is the interviewee familiar with Django and SqlAlchemy ORMs. Hint provided
> for their past experience with Hibernate in Java. Possible follow up
> question: would you use an ORM in a new Python project, and under what
> conditions?
* What are your thoughts on the following "Best Practice" advice?
1. Use tuples instead of lists because they're faster.
2. Use `while 1` instead of `while True` for infinite lists because the former is faster.
> This candidate is experienced. I expect them to have a bad attitude towards
> "best practices". I also expect them to say that hunting performance,
> especially micro-performance like the above advice is about the worst
> thing a developer to do. An extremely good response would be that they're
> both probably wrong or to ask under what circumstances they would be right.
> Follow up: if you were interested, how would you verify performance? Leads
> into a question about performance testing: when, why, how?
## Practical (if there's time)
* Code review on [Eurobis-QC](https://github.com/lifewatch/eurobis-qc)