Matthieu Tanguay-Carel, Udemy Ruby on Rails Instructor & Code Mentor
He’s quickly become an active Codementor, racking up more than thirty sessions in his first month alone. If you’re currently learning to code, Matthieu’s creation, What’s Next?, is a handy resource to help beginner, expert, and freelance developers decide what to learn.
After college, I worked as a consultant at Thoughtworks for more than five years, doing a lot of web development, Java, backend, and coaching.
Then I took a sabbatical and went to Madrid for a year. I spent some time taking online courses, mostly on history and philosophy topics, which I have a bit of an addiction to. What’s nice about them is that you can take them very seriously, do all the quizzes, watch all the videos… or you can have a casual interest and just watch a couple of the lectures.
I like the freedom of the freelancing lifestyle – I really don’t envy people who go to the office every day. The change in lifestyle has been huge, but it’s been a great fit for me. One thing you have to cope with is loneliness, and I do miss teamwork. That’s why coaching and Codementor are so great – they’re human and personal.
I’m working on a personal project about language learning. As a language learner, there are a lot of questions you have that don’t have an answer.
Let’s say you want to know, “What are the most useful thousand words I should be learning next?” Maybe you’ll have a frequency list for that language to help you decide. But then you have to consider that the list is going to be different depending on context – is it for casual conversations, business conversations, or fiction? Or, you might ask yourself, “What are the words I’ve seen the most often that I don’t know?” If you could figure that out, generating flashcards out of those words would be interesting and helpful.
So I’ve been working on a Ruby gem called text-analysis-utils that’s trying to ask some of these questions. You can give that gem the article you’re reading and it’ll give you statistics about it. You can tell the gem the words you know, and the words you don’t know, and it can estimate your vocabulary size. Because it knows the stuff you’ve been reading, you can ask it for example sentences for certain words. If you remember the article, it can also be an effective way to jog your memory.
The goal is mostly exploratory – from working on them, you start to realize how hard these questions can be to answer. For example, vocabulary size is very difficult to estimate because you have one size while reading and another while talking. But I’m still really interested because it’d be nice to invest in something useful to someone who’s not a Ruby developer. I think of it as research, and maybe in a couple months, or a couple of years, something else can come out of it.
I’m on Ubuntu most of the time. I’m a big advocate of open-source software, so it’s pretty much the only OS I can stand using. I spend most of time on the command line with Vim, a code editor.
For client sessions, I’m a big fan of Tmate. You can set up a command-line session with your client really quickly, so that’s worked really well for my Codementor work.
This one is kind of pedestrian, but looking at the logs or the stack traces is an important part of solving a problem. Sometimes you might want to do a bundle install for a rails app and a gem doesn’t install, so the first thing you do is just try and install that gem. Then, if that install fails, you can look at the stack trace and find out why it’s not installing.
I also spend a lot of time thinking about the process of troubleshooting programming problems. A lot of our time is spent troubleshooting things that have simple solutions, but the feedback coming from the software is terrible. We end up searching for solutions on Stack Overflow, which is a great resource, but it would be nice to have a dialogue with the computer.
In a lot of cases you’re focused on fixing the problem, but it can be useful to ask yourself, “What can I do to get a better error message?” One of the saddest parts of a programmer’s life is when a piece of software is failing but there’s no error message, so you then have to try and make it fail in a way that’s going to give you information.
Sometimes, you’ll be working on a website and your AJAX call fails. It’s nice to work in the sandbox of a browser, but browsers are also really good at hiding error messages. They might log cookies or headers and you won’t have access to them, or the error messages in a lot of situations might just be terrible. You might make a cross-origin resource sharing (CORS) call, and if there’s an error on the server, your response headers might not be what you expect.
I came late to the teamwork side of programming. I wish someone had told me about pairing and working with colleagues to get quality work done. It can be easy to get stuck, go deep, and lose your perspective. I used to use a lot of Google-oriented problem solving: you have a problem, you search for a solution, you paste some code and you fix it.
If you have a problem, it’s good to identify the specific thing that’s not working. “I have a problem with Angular” is not useful; you need to tell us exactly what you think is going wrong.
It’s also not a good idea to give homework to your mentor in your request. For example, I see clients posting requests in which they want you to read the API for something. That’s not the best way to approach this – it makes it feel a little like a sweatshop. It’s much more rewarding to do the work together, particularly because the problem you actually have might not be the problem you think you have.
From a time-efficiency perspective, for the client as well, it’s probably better to get to a session quickly and expose the problem. You’ll get good feedback into whether that problem is the problem you should be solving. If you’re worried about getting into a session and paying for something that won’t help, that’s what the grace ten minutes is for.
Here’s an example of a well-written request: “The picture for my website is always on the left, and I’m trying to center it. Here’s a link to the site. I’m using the following technologies.” That’s a perfect request, because I can go have a look before the session, and then we can start.
I encourage clients to go onto Codementor for pairing. Maybe you have a difficult feature to code, one that’s central to your project. You can go onto Codementor and have, say, an expert rails developer give you advice on your design that might save you a fortune in your own time and in later troubleshooting sessions.
I’ve also had a couple of sessions of high-level consulting: “I’m trying to do X. What do you think of this technology versus that technology?” Sessions that had no coding involved. I think that gives great value, because you can provide a narrative to the client. The client usually has a lot of technologies to choose from, and they all claim to be the best.
Need Matthieu’s help? Book an 1-on-1 session!