Skip to content

Latest commit

 

History

History
1121 lines (969 loc) · 62.6 KB

dev-programming-cs.md

File metadata and controls

1121 lines (969 loc) · 62.6 KB

Web Development, Programming, Computer Science

EXPERIENCE/BLOG

Python

JavaScript

React

CSS Design and Best Practices


RESOURCES

Full Stack Developer path

RESOURCES FOR WEB DESIGN and WEB DEVELOPMENT

REFERENCE

HTML5 RESOURCES

CSS RESOURCES

JAVASCRIPT RESOURCES

NODE.JS DEVELOPMENT

WEB DESIGN

TYPOGRAPHY

COLORS

IMAGES AND VIDEOS

BEST ICONS

  • Font Awesome: The world's most popular and easiest to use icon
  • Ionicons: Beautifully crafted open source icons
  • FLATICON Free vector icons - SVG, PSD, PNG, EPS & Icon Font - Thousands of free icons
  • iconmonstr: Free simple icons
  • icon8 | Download free icons, music, stock photos, vectors (PREMIUM)
  • icon54 | Vector line and solid Icons collection pack for iOS, Android, Websites & Apps (PREMIUM)
  • Fontastic | Free Icon Font Generator
  • IcoMoon | Icon Font & SVG Icon Sets
  • Entypo+: Another beautiful icon set
  • ICONFINDER: Free Icons!

RESPONSIVENESS

JQUERY PLUGINS / ANIMATION

USER EXPERIENCE

DESIGN INSPIRATION

Some amazing designers on Dribble:

OPTIMIZATION, VALIDATION & COMPATIBILITY

IMAGE COMPRESSION

  • Compress.ioo - Optimize and compress your images online.
  • JPEG Optimizer - Compress and Resize Your Digital Photos
  • TinyPNG – Compress PNG images while preserving transparency

GENERATORS

CONVERTERS

SNIPPET TOOLS

WIREFRAME

SPEED TEST

DEVELOPER TOOLS

ONELINE EDITORS

IDE / TEXT EDITORS

FTP CLIENT

  • FileZilla - The free FTP solution
  • WinSCP :: Free SFTP and FTP client for Windows
  • Cyberduck | Libre server and cloud storage browser for Mac and Windows

Hosting Tools

SOCIAL NETWORK

MENTOR AND MENTORING:

  • hack.pledge() | A community of developers helping each other master software craftsmanship

SOCIAL MEETING

KEEPING UP WITH THE WEB INDUSTRY

REAL-WORLD STEPS TO A FUNCTIONAL WEBSITE

  1. Define your project (goal and audience)
  2. Plan out everything
  3. Sketch your ideas before you start designing
  4. Design and develop your website with HTML and CSS
  5. It’s not done yet: optimization
  6. Launch the masterpiece
  7. Site maintenance

OTHER:

PROJECTS

FREELANCING


CODE CHALLENGES

  • codekatas
  • projecteuler
  • Topcoder
  • Spoj
  • Code Golf Stack Exchange
  • code.org/learn
  • interactivepython.org/runestone/static/pythonds/index.html
  • try.github.io/levels/1/challenges/1
  • tryruby.org/levels/1/challenges/0
  • lifehacker.com/bento-showcases-the-best-resources-for-learning-to-code-1450016607

Beginner-Intemediate:

  • codecombat
  • codingame
  • coderbyte
  • codewars
  • codedefights
  • codingame

Intermediate-Advanced:

  • topcoder
  • hackerrank
  • leetcode
  • codechef
  • geeksforgeeks
  • codeforces

COURSES & DOCS

JS

React

Python

html/css

Computer Science

Others


INTERACTIVE TUTORIALS | BOOKS

WebDev/Programming

JS

React

NodeJS

Python

Primer

  1. Beginning Python From Novice to Professional
  2. Python Learning Handbook (Learning Python)
  3. Python Programming (Program Python)
  4. Python Cookbook
  5. Python Programming: An Introduction to Computer Science
  6. Modern Python Cookbook

Advanced Reading

  1. Python Core Programming (Core Python Applications Programming)
  2. Fluent Python
  3. Effective Python: 59 Effective Ways to Write Better Python
  4. Learning Python Design Patterns
  5. Python Advanced Programming(Expert Python Programming)
  6. Python Performance Analysis and Optimization ( Mastering Python High Performance )

Web Framework

  1. The Django Fundamentals (Tango with Django)
  2. Lightweight Django(Lightweight Django)
  3. Python Web Development: Test driving method
  4. Web Development with Django Cookbook
  5. Test-Driven Development with Django
  6. Django Project Blueprints
  7. Flask Web Development: Python-based Web Application Development
  8. Deep Understanding Flask (Mastering Flask)

Crawler development

  1. Web Scraping with Python
  2. Proficient in Python Reptile Framework Scrapy ( Learning Scrapy )
  3. Web Scraping with Python
  4. Python reptile development and project combat
  5. Python 3 Web crawler development combat

data analysis

  1. Use Python for Data Analysis
  2. Python Data Science Handbook
  3. Python Financial Analysis (Python for Finance)
  4. Python data Visualization Cookbook
  5. Data Wrangling with Python

Machine learning

  1. Python Machine Learning with Python (Introduction to Machine Learning with Python)
  2. Python machine learning Practice Guidelines (Python Machine Learning Blueprints)
  3. Python Machine Learning Case Studies
  4. Python Machine Learning Practice: Test-driven Development Approach (Thoughtful Machine Learning with Python A Test Driven Approach)
  5. Python Machine Learning Cookbook
  6. TensorFlow: Practical Google Deep Learning Framework

Design

CSS

HTML

Ruby

Performance

  • Lighthouse
  • Google Speed

WEBSITE & PORTPOLIO

Photography / Design

Designs

Blog


Morning - Evening ROUTINE

  • Evening Journal
  • Review learnings or Problems before bed
  • Plan for tomorrow - todo list
  • Layout clothes
  • Clean up
  • Good & bad
  • Put cell phone away
  • Window breathing
  • Journal
  • Get dressed
  • Pack & plan for day
  • Shower
  • pushups or jumping jacks
  • Breathing techniques (Wim hof)
  • Make bed
  • Coffee, tea, propel

White Belt

You don't know what you don't know.

  • You know some syntax, a few keywords.
  • You can come up with a dozen variations on Hello World.
  • You don't even know how to Google your questions; it's very hard for you to even figure out how to even ask how to do the thing you want to do.
  • You don't yet know the difference between good code and bad code. Which means your code is bad.

Yellow Belt

You know what you don't know, but you don't know very much

  • Syntax has improved, and you know more keywords.
  • You've successfully made a thing run, without debugging.
  • You can't write a full program from start to finish, but you can get pretty far.
  • You can kind of figure out how to Google your questions.
  • You have a rough idea what bad code looks like.

Orange Belt

YOU KNOW CODE-FU! You've pretty much learned everything at this point.

  • You've learned basically all of the keywords, and you totally get the syntax.
  • Your stuff runs successfully, and you can make the program do the thing you want to.
  • You can Google any question you have.
  • You can successfully identify bad code. And it's everywhere.
  • People are idiots and terrible coders.

Purple Belt

You're practically a master; getting to master is all about learning those nunchaku. I mean, there's a few things here or there you don't know about, but you're leveling up all the time.

  • There's a few "neat tricks" in the language. Ternary operators are spiffy, Regexes are handy. There's a bunch of stuff you can do on arrays
  • Your stuff runs successfully, and if you have time, you try to optimize it.
  • Abstraction is starting to click; it's important to be DRY and separate concerns
  • [framework] is pretty cool, you should totally check it out
  • Some of those guys in Google search results are idiots. You have to be careful where you get your information.
  • You know that you've written some bad code
  • You're writing some good code because other people tell you so
  • You wonder why people don't optimize their code more often

Brown Belt

Dude, it's not just about nunchucks. That why you learned the Sai, and the Bo, and the eskrima. You're all four ninja turtles wrapped up into one post-adolescent mutant ninja coder. You can convert red bull and pizza into über optimized 1s and 0s.

  • You can use every neat trick in your language. Every variable is a ternary operator of some sort. Bitwise FTW. Why use a find and replace method when you can just do it in one long regex?
  • Your stuff runs; but if you've got time you do some unit testing.
  • You abstract everything everywhere all the time. Separation of concerns, man!
  • [framework] is the best and anyone who says otherwise is wrong. That's why you write plugins for it!
  • You've written a few blog posts, or answered a few questions on Stack Overflow.
  • You consistently write good code; people can count on you for writing good stuff
  • Other people compliment you on your creativity in using obscure features of your language
  • You wonder why everyone doesn't optimize their code more; don't they care about optimization?

Black Belt

You know that scene from Indiana Jones and the the Raiders of the Lost Ark, where this one bad guy is awesome with a sword, and Indy just shoots him? You're Indy; you don't care about the flashy tricks any more, it's just about doing what makes sense. You know what you don't know, but you know you don't know very much.

  • Neat Tricks are exactly that: neat tricks. You use "hacks" sparingly, because, just like Harrison Ford, you've gotten sick and you don't have time for a long, convoluted solution.
  • framework] has some flaws. that's why you've got [framework] or [framework].
  • You know what? None of those frameworks do the thing you need; that's why you've been working on this new framework.
  • Your code is documented, and readable.
  • Your code passes unit tests, and that's more important than, "it runs."
  • You abstract when necessary; you have crap to do.
  • You've answered a lot of Stack Overflow questions because you've found out there's lots of ways to do the same thing.
  • There's no such thing as good code. All code could be better.
  • You wonder why you don't code as well as everyone else.

I'm not entirely sure where I rank, but I am absolutely certain that I was an Orange belt for much longer than I thought. I think it's very easy to reach Orange Belt status and think that you know how to program.

While a Brown belt knows most of the features of a language, the Black belt finally knows when to use them.

What skills do self-taught programmers commonly lack? What should a self-taught programmer study to get up to speed with his/her formally-educated peers?

Humility

Someone quite interestingly commented on "humility" as a thing that self-taught programmers lack. I agree.

I've been plagued by Impostor Syndrome for a long time, and I think that's kept me humble and driven me to want to study and practice as much as possible, for fear of getting "found out".

There's no shame in being proud of the fact that you taught yourself, but you should be aware of the limitations of your teacher.

Algorithms

This is classic computer science right here. Programming without knowledge of algorithms is like carpentry with just one kind of saw: you can get the job done, but it's going to take a lot longer.

You can look at an algorithm as "discipline". When you learn to write them, what you're doing is solving a problem with discipline; using structure, patterns, and logical steps.

When you don't know how to discipline your mind, you don't know how to write algorithms.

Not only can you not write algorithms unless you've studied them, you don't know how many algorithms others have written, too.

I spent four days trying to figure out how to do a permutation. I was so proud of myself when I figured it out. Right up until I discovered that B.R. Heaps had figured it out in 1963.

Design Patterns

This comes with Education and/or Experience. There's more than one way to structure your code, and there's a right time and a wrong time for each. You either need to make mistakes along the way and learn when to use each pattern, or learn from someone else who's already made the mistake (a teacher).

Programming Paradigms

Object-Oriented Programming is not The Way. Neither is Functional Programming. Nor Reactive Programming. It is A Way.

There are different ways to program, and they each have a purpose. Not only that, some languages are naturally better-suited for one paradigm or another.

If all you have is a hammer, everything looks like a nail.

Take that into self-taught programming and you'll find yourself hammering in nails, screws, staples, and thumb tacks.

I remember a self-taught .NET programmer actually telling me once, "well, it's not programming unless it's object-oriented. And that's why I don't consider JavaScript a programming language." That's a very, very flawed train of thought.

Data Structures

Granted, your language can give you a basic idea of what the different data structures are. But again, that's a basic idea.

Self Taught programmers can have a tendency to only stick to data structures that work within their favorite language. Just because it's not a primitive, or even a common structure in your language, that doesn't mean it can't exist. Of course, that also means that maybe it shouldn't exist, either.

The world is very small if it all can fit inside of an array.

Testing

Maybe it's just me, but there's a lot of ways to test your code before pushing it to an environment. Learn how to do unit testing.

More importantly, learn test-driven development.

There's a difference between testing your code, and writing testable code.

For me, The Pragmatic Programmer was a big help.