Tom Wilson

Tom Wilson

Mentor
5.0
(9 reviews)
US$20.00
For every 15 mins
30
Sessions/Jobs
ABOUT ME
Passionate professional developer who loves teaching
Passionate professional developer who loves teaching

I love JavaScript and the JS ecosystem that has sprung up after the creation of NodeJS. I collaborate with independent development teams around the world to write full web applications, and to create UI and other reusable JS components.

I also have many years of experience in Java with Spring.

I'm always up for discussions that challenges the status quo to find a better way to do things.

English
Central Time (US & Canada) (-05:00)
Joined July 2018
EXPERTISE
10 years experience | 1 endorsement
I started writing JavaScript in the late 2000s when jQuery was very popular. I transitioned to Backbone, then Mustache, and finally to Re...
I started writing JavaScript in the late 2000s when jQuery was very popular. I transitioned to Backbone, then Mustache, and finally to React with Redux, which is my current preference for front-end development. The JavaScript culture has really taken off in the last several years with NodeJS and annual language releases. Babel has been a boon to developers, allowing us to use many of the latest features in browsers (and Node releases) that do not yet support them. I test-drive all of my code to achieve 100% coverage using Mocha and Chai. I really like Regex and working with the JS Abstract Syntax Tree to write codemods and custom eslint rules.
Es6ReactRedux
View more
6 years experience | 1 endorsement
Java was the primary language I used in college and at my first job. I've worked on web applications and back-end document processors. Ev...
Java was the primary language I used in college and at my first job. I've worked on web applications and back-end document processors. Everything I write today is test-driven using JUnit and Mockito. I also have Java teaching experience - I successfully taught a few non-programmer friends the basics of Java as an introduction to the world of programming.
5 years experience | 1 endorsement
Everything I have written in the last 4 years has been test-driven. Compared to non-TDD projects, the quality of the code is higher and t...
Everything I have written in the last 4 years has been test-driven. Compared to non-TDD projects, the quality of the code is higher and the stability of the project in terms of minimal defects and regressions is much better. Test-driving your code is so important to ensure that the important code you write for your application doesn't accidentally change in a way that breaks your app. Every time you add a new feature or try to refactor some old code, there is a risk you'll make a mistake and break something. A solid test suite greatly reduces that chance. It can provide confidence that you aren't breaking things when you change code. There are different types of testing. There is a classical school that tries to use very few "fakes" (stubs, mocks) to maximize the amount of real code that runs. One advantage of voiding fakes is that you don't need to worry about faking incorrect APIs, and you're testing true interactions of the real code. Another camp, sometimes called "mockists," likes to isolate the unit under test by stubbing most or all of its collaborators and dependencies in order to test only the internal functionality of the component. One advantage of using fakes is that it can reduce the complexity of your test. Both techniques have advantages and disadvantages. It's very important to know what the limitations are and when those tradeoffs are useful and when they cause problems.
MochaKarma jasmineChai
View more
MochaKarma jasmineChaiJUnitSinonProxyquireMockito
View more
4 years experience
One of my duties as a lead is to conduct technical screenings. I am part of an interviewing team that screens candidates for technical po...
One of my duties as a lead is to conduct technical screenings. I am part of an interviewing team that screens candidates for technical positions. I wrote a series of proramming tests that I administer during interviews to force candidates to prove their fluency in the languages for which they are interviewing, and demonstrate the problem-solving skills and team collaboration abilities we require. This helps us determine the level of the interviewee (junior, mid, senior). We assess things like - The correctness of the answers - The approach to the problem - The candidate's willingness to collaborate with others by asking questions or verbalizing their strategy - Debugging skills when something goes wrong - Teachability: How easily they can apply a new concept right after it has been explained.
5 years experience | 3 endorsements
I work with a lot of promising junior developers. Part of my job is to train some members of my team to be leaders, capable of leading th...
I work with a lot of promising junior developers. Part of my job is to train some members of my team to be leaders, capable of leading their own team at some point. That means cultivating skills and coding instincts. Paired programming and test-driven development are excellent tools for knowledge-sharing. It's not reading a book or watching a video or doing homework and exercises. It provides actual experience writing and passing tests for useful, real-world code that aren't contrived examples, with the attention of an experienced developer. Even after the code is done and the tests pass, the effort of refactoring is incredibly useful because it fosters a mindset of making code readable and efficient. It's not good enough that code works - it should also be easily understood by all the developers who will read it and maintain it in the future. There are so many important skills in software. Some are more obvious like debugging, algorithm complexity analysis, and avoiding anti-patterns. But there are others that are often overlooked like boolean algebra, being able to understand API documentation, and dev-ops or environmental setup. One of the great things about paired programming is that a junior developer can practice all of these skills while creating value by doing the actual job with a veteran, instead of taking classes or reading text books and looking at oversimplified examples.
5 years experience | 2 endorsements
Git, paired with Github, is a very powerful source control technology. Ovet the years I have learned a lot of its really useful features,...
Git, paired with Github, is a very powerful source control technology. Ovet the years I have learned a lot of its really useful features, like searching all of the Git history for a partial commit message or piece of code, recovering accidentally lost commits, and re-writing history through interactive rebasing to create a better story for the way the code evolved. After using Git for so many years I can't imagine using anything else and losing all of the incredible tools. I've set up pull request templates and webhooks into Jenkins that that run all your tests and verify jobs, and requires them to pass before a PR can be merged.
GitHub
View more
GitHub
View more

REVIEWS FROM CLIENTS

5.0
(9 reviews)
Joshua Hendrix
Joshua Hendrix
November 2018
Tom was great to work with and very helpful!
Kyle McDaniel
Kyle McDaniel
October 2018
Great session! Learned a lot in a short amount of time.
Drew O'Connor
Drew O'Connor
October 2018
Top notch assistance with Electron, Node.JS, and AWS troubleshooting. Tom is an expert problem solver with a broad skillset to back it up. Also, it is evident he enjoys working with people and helping them learn along the way. --Thanks Tom!
Zain
Zain
October 2018
Tom is very knowledgeable in React (the only one one we worked on so far) and also a very patient mentor. He answered all of my questions and did a few hands on exercises to ensure I understood the concepts.
Zoe Barrington
Zoe Barrington
October 2018
Really helpful and very clear!!! Definitely will be messaging again!
Brianna
Brianna
October 2018
Excellent tutor, explained everything really well!
Aliid
Aliid
October 2018
Mentor is Pro in writing scripts, he solved an issue that i have worked with many people before, but no luck.
Brandon Le
Brandon Le
October 2018
Willing to walk you through your problem and dissect it step by step, will be using Tom again in the future.
Loki
Loki
October 2018
Tom was Amazing, In very less time he just understood the code already wrote and what he needs to do for my requests, with respect react-redux.
EMPLOYMENTS
Lead Developer, Scrum Master, Technical Screener
Tek Systems / John Deere
2014-08-01-2019-10-01
I spend most of my time collaborating with teams around the world to develop reusable JavaScript modules and web applications with a Node...
I spend most of my time collaborating with teams around the world to develop reusable JavaScript modules and web applications with a Node JS backend, built on Jenkins and hosted on AWS. I test-drive all my code running Mocha or Karma and Chai. We use React and Redux on the front-end. Babel transpiles our code to ES5 so we can use the latest JS features, our styles are organized using SASS, and Webpack concatenates and minifies our code for faster downloading. One of my favorite projects was a massive codemod I wrote using the JavaScript Abstract Syntax Tree that re-writes a lot of our source code to convert legacy code that uses global namespacing patterns into modern commonJS modules. I also run daily scrum on an Agile team and interview candidates for new positions, which includes a technical screening and completion of programming tests.
Java
Google Maps
Test driven development
View more
Java
Google Maps
Test driven development
Es6
React
JavaScript
Webpack
Babel
Redux
View more
Programmer
Rain & Hail
2009-06-01-2014-08-01
I maintained two web applications and a few back-end document processing applications in Java. The web applications used jQuery and ESRI ...
I maintained two web applications and a few back-end document processing applications in Java. The web applications used jQuery and ESRI maps with Dojo for crop insurance customers to organize their farming operations and insurance. The back-end report processors listened to IBM MQ for messages, created and delivered PDFs using iText and Xerox VIPP, and implemented JMX to enable a remote admin interface.
Java
jQuery
Spring
View more
Java
jQuery
Spring
jQuery UI
Spring MVC
Dojo
JavaScript
Esri mapping
View more
PROJECTS
Modernization: Global Variable to CommonJS Conversion
John Deere
2017
This was a solo project I worked on here and there. It started out as a proof of concept to showcase the power of the JavaScript Abstract...
This was a solo project I worked on here and there. It started out as a proof of concept to showcase the power of the JavaScript Abstract Syntax Tree and codemods, but it didn't take long before it morphed into something much more ambitious. It was huge, challenging project that kept increasing in complexity as I uncovered more important details and edge-cases. We have dozens of JavaScript modules, each with their own repository on our internal GitHub. Many of them were written before Node's CommonJS pattern, so they expose their functionality using global namespacing for use in our web applications that are full of legacy browser-ready ES5 code. Global namespacing is old and hard to maintain. Module patterns are the future. So I wanted to replace global namespacing with CommonJS! This doesn't do the size and complexity of the project any justice, but these were the major parts. I wrote code to automate all of these steps: - Clone all of the GitHub repositories from several GitHub users - Read through all of the source code in all of the modules and extract all variable declarations and references - Find out which are global, and ignore local variables - Determine whether each global is native JS (window, Math), a third-party library (lodash, jquery), or an in-house namespace - Record all namespace definitions and references to build a module dependency graph, showing where each namespace is defined, including third party globals - Replace all namespace definitions with "module.exports", adding extra code to immediately invoke initialization functions, whenever they exist. - Replace all namespace references with local variables, each initialized at the top of the file with a "require" to the appropriate file or module, determined by the dependency graph
Node.js
Abstract syntax tree
JavaScript
View more
Node.js
Abstract syntax tree
JavaScript
Codemods
View more