Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add fundamentals of programming & intro to Scala syntax #4

Open
robinske opened this issue Jul 9, 2016 · 6 comments
Open

Add fundamentals of programming & intro to Scala syntax #4

robinske opened this issue Jul 9, 2016 · 6 comments
Assignees

Comments

@robinske
Copy link
Member

robinske commented Jul 9, 2016

Some attendees will be completely new to programming. We want material that covers the basics of programming:

  • what is a variable, an expression, a method?
  • what are data structures?
  • how do i loop/map?
  • boolean logic
  • commenting
  • flow control - if/else, match/case
  • how is my code executed?
  • what is the terminal?
  • what is a REPL?
  • what is a virtual machine?
  • and more...

This section can also introduce Scala syntax

@DagnyTagg2013
Copy link
Contributor

How are comments saved here? Wanted to suggest adding IntelliJ IDE Worksheets exercises via *.sc. Most professional developers work with IDEs as productivity boosters. Suggest newbies not waste time with command-line. I can contribute several from my personal repos!

trane added a commit to trane/curriculum that referenced this issue Jul 30, 2016
This provides a rough direction and level of abstraction that
I think is useful for very very new programmers when it comes to
making that leap to understanding variables.

I purposely stayed away from mutation (var/val) and using names like
functions or types

Ref: scalabridge#4
trane added a commit to trane/curriculum that referenced this issue Jul 30, 2016
This is incomplete, but I want to get this up early for review
to make sure it is a useful level of abstraction and discussion

There are several things we can talk about here:
 - Hoare logic
 - Decision trees

Obviously, we need actual code here.

Ref: scalabridge#4
trane added a commit to trane/curriculum that referenced this issue Jul 30, 2016
trane added a commit to trane/curriculum that referenced this issue Jul 30, 2016
This adds some playground type stuff for the REPL and sticks it
at the beginning of this section, leaving the larger discussion for
after students have time to play around with the REPL.

Ref: scalabridge#4
@DagnyTagg2013
Copy link
Contributor

OK -- I'm volunteering to do the LIST intro and exercises! Will submit PR remotely later!

trane added a commit to trane/curriculum that referenced this issue Jul 30, 2016
Boolean logic is so amazing that I can barely controll my excitement.
I hope to pursuade students to explore the things they learn by
playing in the REPL and trying to answer their own questions by trying
it out.

Ref: scalabridge#4
@noelwelsh
Copy link

Some general thoughts on curriculum. The most common way to teach programming is what I call the "bag of syntax" approach. It introduces a programming language as a collection of syntax and gives the student no tools to decompose problems or implement solutions using that language. Students are expected to just intuitively understand how to do this. I recall this from both my intro to programming and my experiences as a TA on 1st year programming.

The approach I learned from the PLT group is to teach programming patterns and introduce language features as they support the patterns. For example, in Creative Scala we emphasise structural recursion (first over natural numbers, then over lists) as the pattern for processing algebraic data types. How to Design Programs, which we've basically ripped off in all our training, has a fairly rigorous design process that does a very good job of making programming a systematic process. We aren't so rigorous in our own training but these ideas underly everything we do.

Our curriculum in Essential Scala is:

  • expression, types, and values (fundamental elements of computing, substitution model)
  • algebraic data types and structural recursion
  • sequencing computation (map, flatMap, and fold)
  • type classes

In Creative Scala we spend much more time on substitution (or will, once that's been written 😄 ), and the majority of the book uses structural recursion, with map and flatMap introduced as abstractions over structural recursion, and algebraic data types introduces at the end.

@DagnyTagg2013
Copy link
Contributor

DagnyTagg2013 commented Aug 2, 2016

Hey there!

Submitted a pull request today for:

  • basic list exercises and links to further reading: /exercises/listBasics.sc
  • a high-level technical take on "Why Scala": /introduction/motivatedScala.md

I'm going to advocate for the following minor tweaks to our teaching approach; and please review my pull request which attempts to demonstrate what I mean:

  • use physical analogies to help clearly and succinctly explain key abstract concepts
  • certain concepts are core to the power of this language; and they will inform and complement the coding approaches to solving problems effectively with Scala
  • provide setup and FAQ WIKIs on can't-live-without tools that will return value almost immediately by making the learning process smoother; as well as providing the means for exploration and deeper learning in the future (eg GitHub, Intellij IDEA, StackOverflow etc)

The motivation for making these minor tweaks is to encourage the Learner not to self-limit, and to make their learning process more enjoyable and productive by fast-tracking them towards professional-level coding approaches to solving problems effectively with Scala.

@DagnyTagg2013
Copy link
Contributor

DagnyTagg2013 commented Aug 2, 2016

Oh! And, I'm not a professional Scala person. My perspective is from someone who wants these points for my own learning experience; and from the perspective that if I were to teach this to my daughter at around 12 years old -- this CAN be done simply because this subject CAN be made accessible.

@robinske robinske self-assigned this Sep 25, 2016
@robinske
Copy link
Member Author

Update! This is in progress via https://github.com/railsbridge/docs/compare/master...scalabridge:rewrite-for-scala?expand=1

I'm incorporating Scala code examples and some beginner-level specifics for Scala idioms (like @DagnyTagg2013's point about immutable lists)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants