Day: 1 Session Time/Number: 2-3pm Session Space: D
Convener: Daphne
Notetaker: Angela
Specific resources to share from session: (links, books, organizations, articles etc.)
Books:
Working Effectively with Legacy Code – Michael Feathers (http://www.amazon.com/Working-Effectively-Legacy-Michael-Feathers/dp/0131177052)
Clean code – Robert C. Martin (http://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882)
Debugging – David J. Agans (http://www.amazon.com/gp/product/B002H5GSZ2)
Links:
How to Debug anything – Talk by James Golick (https://www.youtube.com/watch?v=VV7b7fs4VI8)
Women who code (https://www.womenwhocode.com/)
Hacker School (http://www.hackerschool.com/)
OpenHatch – find an open source project (http://openhatch.org/)
Julia Language – (http://julialang.org)
Gandi VPS hosting – (http://www.gandi.net/hosting/)
GitHub trends (http://github.com/trending)
Homebrew package manager for OSX (http://brew.sh/)
SCIKIT learn (http://scikit-learn.org)
Linux Kernel Debugging (http://elinux.org/Kernel_Debugging_Tips)
——————————-
Discussion Notes:
Tips to keep in mind when starting to work on a new/large project
– Don’t try to understand everything all at once
– Approach with the goal of only understand small pieces at a time
– Principle of Dynamic programing – start with the smallest sub-problem and build your understanding from there
Debugging techniques – Gaining iterative understanding and “flow”
– Break things!
– Insert things like exit(1) or #ERROR
– try to see what happens when it fails
– test the scope of #IFDEF
– Try to get a stack trace to understand how the functions are layered. Who is calling who?
– Use GDB for C debugging
– Linux Kernel Debugging (http://elinux.org/Kernel_Debugging_Tips)
Working with others:
– Don’t be afraid to ask for help – it’s not a sign of weakness.
– Especially if you are new, it’s great to take advantage of being able to talk to more experienced people on your team or community.
– Spinning your wheels is not efficient.
– Show people you are genuinely interested & you care by asking questions.
Working with open source:
– Code bases are searchable, search for strings/error messages to help you narrow down to a section of the codebase.
– Nothing is ever a black box if you have the source code, the problem is in there somewhere.
Learning opportunities:
– Hacker School program – you have to be a developer to apply
– At a coworking space in NYC. Learn and work on whatever you want for 3 months.
E.g. working on Julia (interpreted language) – http://julialang.org
– Language good for learning, especially as Julia is written in Julia
– Start with a List of Bugs
– Ask current maintainers what is the best bug to start with for a beginner.
E.g. follow the problem from top to bottom to find out where the problem is. You can take a “vertical snapshot” of the language.
Contributing to open source – How to get started?
Try fixing mistakes in documentation & submitting patches.
– you don’t need to re-submit or revise as much
– Use it to learn the tools and processes for creating patchsets before you have a lot of code to submit
– use it to learn the culture of the mailing list and submit system
– as a beginner you are the customer of the documentation as you are learning the source code
– no submission or pull request is too small – it’s still valuable as you are improving
– small submissions/chunks are also easier for those reviewing/moderating the pull requests
– it’s empowering to make your first submission
Other options are – making code more legible & more readable without changing functionality
– readability is important, write for other humans, method names are important
Be brave and make your first submission
GIT tips:
– Try using GIThub as it’s a good visual tool (create a fork, make a change within your fork, submit pull request)
– take time to understand the syntax as the GIT terminology is not always clear (e.g. verbs are from the repository perspective instead of the user)
– if you are already familiar with GIT syntax perhaps you can laugh along with these fake GIT commands (http://git-man-page-generator.lokaltog.net/)
Finding a project to contribute to:
– OpenHatch (http://openhatch.org/) – you can use this tool and resources to search open source projects (e.g. by language, advancement level)
– GitHub trends (http://github.com/trending)
– Look for a new project as an opportunity to learn a new language
– Look for a new project to work on in a language you love
How to start in a new language?
– Try to change your perspective at the beginning so that you can learn the language *and* it’s coding style.
– Ask coworkers – what are best practices ? what are good resources? – there are a lot of language specific blogs and forums you can learn from. People are (usually) kind to learners and genuinely want to help. Look for beginners forums.
IRC tips
– IRC is a great place to go and learn and ask questions. A lot of open source projects may have an IRC channel listed on the project page that you can join.
– IRC clients
Linux – Pidgin (http://www.pidgin.im/)
Windows – MIRC (http://www.mirc.com)
Windows – XChat (http://xchat.org/)
Mac – Adium (http://adium.im/)
Android – Andchat (http://www.andchat.net/)
Also some Web based clients
LinuxChix has a good getting started guide for how to set up a client (http://www.linuxchix.org/irc-chat.html)
– There might be one nasty person to ignore, but you can also find a new community/project if they are rude! Most are great and welcoming to all – good experiences with Linux Kernel, Systemd etc.
Upstreaming
– Always run the latest version to see if it’s already fixed upsteam and you can patch your fork
– If you find it’s not fixed this is a great opportunity to help both your customer and the community
– GIT workflow – try to keep up to date/pull daily as things may have changed overnight!
– Can I submit your patch on your behalf? e.g. Try to get vendor code to mainline
Suggested projects & good experiences:
Homebrew package manager for OSX (http://brew.sh/)
– good place to start, good community, package descriptions
Translation and localization
SCIKIT learn (http://scikit-learn.org)
– Machine learning (and similar on Coursera)
Data Analytics/Visualization Look for other projects using open data
– Find out where the data is coming from (e.g. government) and look for other sources to get inspired
e.g. (http://bdon.org/, transit data, NYC taxi data)
Learn Databases using MySQL and postgreSQL
Leave a Reply