His teenage son challenged him to start applying for roles in 3 calendar months from now. He figures he can dedicate a max of 3 hours per day. How should he best use his time?
Should he drill on Leetcode? Build a small portfolio? Gain a specialization within Python? How best would you allocate his hours?
Trey Hunner is one of the more gifted speakers - and he's really laid out a great exercise and test-coverage plan.
The best thing I can say about pythonmorsels is that, every 15-20 exercises, I look back and realize how little I actually knew. Going through all the exercises is easily the equivalent of a full-semester "Introduction to language" course at a college (minus the algorithmic elements - this is a "language concepts" site)
Leetcode only gets you pass the first round of interviews and not every company does them. I consider these useless textbook problems but you'll need them to get the job. They won't help you much in the job.
More importantly (imo) he needs domain specific knowledge. I.e. if it's going to be web development then he needs to start a web project with the backend in python. If it's stats/analysis he needs to start on analysis projects. Etc.
My advice is on making small projects that cover topics he'll be working on in the jobs he applies for to build a small portfolio. And brush up on the leetcode like a month before.
For learning, exercism.io is amazing: they assign people as mentors to review your code, and I've had really good experiences while learning Rust, with feedback calibrated nicely to my level of expertise.
For how to think about algorithmic interviews, I always recommend this short set of notes: http://courses.csail.mit.edu/iap/interview/materials.php
For fun, try Advent of Code this year and see how far you get, and whether you like it. As @analog31 suggested, this might be a fun thing to do with his son.
Making switch to Python is rather a broad goal. It's just a tool, and as any tool it's used for a purpose and often along with other tools.
If he aims at any entry level coding position, then likely it'd be more about entry level, than proficiency. Basically, testing the discipline and analytical thinking (thus all puzzle and algo problems, dreadful leetcode etc).
If he plans to leverage his present skillset and experience, then in that alloted time I'd try to implement some aspects of his present job projects in Python (if such aspects are mappable, of course). General goal is to try and fuse his present experience with the newly acquired knowledge of Python (a known problem and solution, just a new tool).
Again, it does not need to be grand, just some specific aspect, say, parsing args or a configuation file, or grabbing something from a database, or triggering some process based on some config, logging something, wrapping his code for reuse or installation etc. Whatever he is familiar with in his job responsibilities.
The goal is to get used to the new tool, know what it takes for it to become useful at his level of experience.
Eventually, he could (in a stretch, perhaps) claim of trying to apply or evaluate the use of Python in his current job scope. This could count more, than just leetcoding ability, which may still be a barrier to get through, however, depending on the chosen companies.
Good luck to him!
Those are the two things I did, I came from PHP and until a 2.5 years ago I never touched python but I work with it full time (also react, which I didn’t know at all when I started.)
What you build isn’t all that important, or the language. Most languages can be picked up on the job. But doing some personal projects + a couple leet code or project Euler problems a week will make one a good programmer in 3 months. You want the personal projects to act as a portfolio you can show off to recruiters though.
The standard docs don't get recommended to beginners very often because they are not designed to be fun/motivating like learning sites, but provided that the student is intrinsically motivated, I think it can be exciting to look at all the modules and start to learn about all the things that people have built and provide for the programmer. Learning to navigate the reference material is an important skill. Some of the sections are confusing, dry, and unhelpful. Others are very worthwhile and knowing where they are is important.
Python in particular has a large standard library, much of which is quite old (good in that it is very mature, not so good in that some of it is barely relevant any more). I've been programming python for a decade and I look at the standard docs every day for something. `stdtypes.html` is kind of a big mess but at some point you have to learn most of what is in there.
If I were hiring a programmer, one of the things I would try to evaluate would be their basic research skills.
I did all the problems. I had some Python experience already but I learned a lot. It felt like climbing a mountain but I found it was frictionless and fun the whole way. I printed out the completion certificate I got.
(I did the Java course and some other courses and they were not as good.)
If your friend wants to keep doing work like the work your friend has been doing in Alteryx, your friend should learn Jupyter, Pandas, and scikit-learn.
"Python Cookbook", which shows you how to do many things (files, networks, servers, binary, data handling). It effectively is a cookbook and helps you have or be aware of several "recipes" to do common things.
To write better Python: Brett Slatkin's "Effective Python: [59|90] Specific Ways to Write Better Python" will get him to write good quality Python code "in general". This could reassure potential employers to some degree.
Having some familiarity or experience with the domain of the organization helps. Python is Python, but there are several subtleties in working writing code that encodes to/decodes from binary packets, or with systems work, or audio processing, etc.
It will depend on whether these companies want someone who "can code", or someone who "can code in Python", or "someone who can code X in Python because that's we're doing X in Python".
Courses are project based. You are doing some small programing project. You will learn both theoretical and practical knowledge to be able to successfully finish it. Their courses are integrated into jetbrains IDEs or you can use web version.
i.e. See projects from "python core track" https://hyperskill.org/tracks/2/projects
- __init__ vs __new__
- Difference between list and set
- Abstract classes use
- Generators vs iterators
- How yield works
- Is python call by ref/val or both. How to implement each
- How python list allocates space, how it is implemented
- what is cpython, pypy
But as we are about to get in December, if he wants to practice general python skills in a fun way, I'd recommend having a look at the advent of code (https://adventofcode.com/2021).
Solving the problems on your own provides only a fraction of the learning opportunity, though. To capture it all, you need to read others' solutions on the related sub reddit. There are a few people out there documenting their solutions super effectively. Last year, for instance, I learned a lot from https://github.com/mebeim/aoc/tree/master/2020
2) figure out what roles he'd want to apply to
3) figure out what python knowledge / tools he's expected to know
4) find project tutorials that use that knowledge / tools
5) reach out to the companies saying what he's doing and if they have any suggestions
What's worked best for me in learning new languages and such is trying to solve small problems I've had or just working on something I'm interested in. I get so burnt out just grinding generic programming problems.
Lots of other great suggestions here.
like, on a 1-10 scale, you're a 5. or a leetcode-5.
as opposed to, how good are you at python?
oh, well, i can usually do leetcode difficult questions without too much difficulty until they involve floating regressive recusions, in which case i'm a little bit more middle-to difficult completing sort of.
sure you can't measure communication abilities, etc., but you should be able to measure pure mastery of a language, then maybe with an algo addition, etc.
Personally I think tech interviews should be talking about the implementation of a solution, even to a stupid question rather than coding