I&#39;ve been having a lot of fun doing Code Katas for my weaker languages <span></span>on <a href="http://exercism.io">http://exercism.io</a><div><br></div><div>Every kata has me think, &quot;I know how I&#39;d do this in Python, but [Objective-C, Ruby, C, etc.] is a bit strange to me.&quot; The community there is pretty awesome. Check it out.<br><br>On Tuesday, December 15, 2015, leam hall &lt;<a href="mailto:leamhall@gmail.com">leamhall@gmail.com</a>&gt; wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Scott, that does bring up a good point. Those of you offering advanced<br>
mentoring may want to establish a minimal requirements list, or a way<br>
to assess someone&#39;s skills before mutually committing time.<br>
<br>
I&#39;d have no problem with you telling me I&#39;m not ready, especially if<br>
you could point out things I could do to get ready!<br>
<br>
<br>
<br>
On Tue, Dec 15, 2015 at 12:25 PM, Scott M. Jones &lt;<a href="javascript:;" onclick="_e(event, &#39;cvml&#39;, &#39;eff@dragoncon.org&#39;)">eff@dragoncon.org</a>&gt; wrote:<br>
&gt; I could offer the following topics but you&#39;ll need a good C background.<br>
&gt;<br>
&gt; - Data structures, associated algorithms, Big-O Notation<br>
&gt;<br>
&gt; - Beginner compiler design, at least stack vs. heap but if you want,<br>
&gt; BNF, lex, yacc, etc.<br>
&gt;<br>
&gt; - Beginner thread coding and thread safety<br>
&gt;<br>
&gt;<br>
&gt; Sample data structure exercise, we need to do this kind of thing to make<br>
&gt; it real:<br>
&gt;<br>
&gt; Write &#39;llproc&#39; (linked list processor) in C with the following command<br>
&gt; line options:<br>
&gt;<br>
&gt; llproc [-d] file1 file2<br>
&gt;<br>
&gt; llproc will construct a linked list of structs using newline-terminated<br>
&gt; strings from file1 with the following definition:<br>
&gt;<br>
&gt; struct {<br>
&gt;    int line_no;  /* Line number in file1 */<br>
&gt;    char *line;<br>
&gt; }<br>
&gt;<br>
&gt; Linked list will be parsed for each line in file2 and any exact matches<br>
&gt; will be deleted from the linked list, otherwise a warning is written to<br>
&gt; STDOUT if no matches.  Remaining linked list will be traversed and<br>
&gt; written to STDOUT after file2 is processed.  &#39;-d&#39; option prints every<br>
&gt; insert/delete, otherwise only warnings and the final list are printed.<br>
&gt;<br>
&gt; All linked list access must be through functional API (with add, search,<br>
&gt; delete, iterate_all, etc.).  NOT COOL to put everything in main()!  No<br>
&gt; goto, setjmp, or longjmp either.  Use malloc/free for all list elements<br>
&gt; and string storage.<br>
&gt;<br>
&gt; Students will present solutions via code walkthrough to everyone.  No<br>
&gt; grading after the fact.  Instructor to make solution available after<br>
&gt; walkthroughs.<br>
&gt;<br>
&gt; BONUS: Solution survives fuzzing attempts with very long strings; only<br>
&gt; acceptable failure modes are invalid command line options, file not<br>
&gt; found, or out of memory, all handled gracefully.  Add an arbitrary<br>
&gt; number of files with file3 being tacked on to the end of the list, file4<br>
&gt; then being deleted from the list, etc., to prove that memory is being<br>
&gt; free&#39;d correctly.<br>
&gt;<br>
&gt;<br>
&gt; On 12/15/15 7:06 AM, Leam Hall wrote:<br>
&gt;&gt; I&#39;d like to encourage those of you who are decent to very good<br>
&gt;&gt; programmers to consider what we&#39;re doing as a calling.<br>
&gt;&gt;<br>
&gt;&gt; Recently I took a C based pre-test for a software security course<br>
&gt;&gt; (<a href="https://class.coursera.org/softwaresec-008" target="_blank">https://class.coursera.org/softwaresec-008</a>). Realizing that I guessed<br>
&gt;&gt; more than I was comfortable with is one of the big things that drove me<br>
&gt;&gt; to re-learn C. That, and a stack of books from previous failed attempts.<br>
&gt;&gt; I&#39;ve resolved to either learn C or give away the books. Being a<br>
&gt;&gt; bookworm, that&#39;s motivation!<br>
&gt;&gt;<br>
&gt;&gt; Your conversations have pointed out something many of us unskilled<br>
&gt;&gt; programmers have heard of; there are other skills and tools to be<br>
&gt;&gt; learned when moving from example code in a book to putting &quot;coder&quot; on a<br>
&gt;&gt; resume. Things like lint, TDD, gmake, coding standards, etc.<br>
&gt;&gt;<br>
&gt;&gt; Would you consider a &quot;Next Steps&quot; course starting in April or May? While<br>
&gt;&gt; the LCTHW-90DW is a 3 month challenge, it is based off the learning idea<br>
&gt;&gt; that the early stages of any new and difficult project are discouraging.<br>
&gt;&gt; With just 2-4 hours of C it can be hard to glimpse the possibility of<br>
&gt;&gt; becoming a kernel hacker. However, there comes a point (~20 hours per<br>
&gt;&gt; Josh Kaufman) where you&#39;re still a rank beginner but things aren&#39;t so<br>
&gt;&gt; painful.<br>
&gt;&gt;<br>
&gt;&gt; By the time someone is through the 90 day challenge they will have<br>
&gt;&gt; enough discipline and pleasure to take on new tools. Maybe you run a one<br>
&gt;&gt; month &quot;TDD with C&quot; program, or &quot;Dive into Pointers&quot;? Or maybe you like<br>
&gt;&gt; some of the Coursera classes and offer to help mentor alongside the<br>
&gt;&gt; classwork? The security class is one option, there are Algorithm<br>
&gt;&gt; classes, Java classes, and a bunch of Python things going.<br>
&gt;&gt;<br>
&gt;&gt; There seem to be several of you who are good at this. Could you talk<br>
&gt;&gt; amongst yourselves, come up with a list of &quot;new programmers should have<br>
&gt;&gt; these skills&quot;, and pick one to mentor? If each of you did one to two<br>
&gt;&gt; &quot;skill months&quot; a year, and there were 4-6 of you, we could just about<br>
&gt;&gt; fill the year!<br>
&gt;&gt;<br>
&gt;&gt; Here are some of the things that have come to mind while reading your<br>
&gt;&gt; notes.<br>
&gt;&gt;<br>
&gt;&gt;     Pointers<br>
&gt;&gt;     Kernel module basics<br>
&gt;&gt;     TDD<br>
&gt;&gt;     Secure coding<br>
&gt;&gt;     Large project management (splint, gmake, SDLC)<br>
&gt;&gt;     Assembler basics<br>
&gt;&gt;     Code profiling (gdb, valgrind)<br>
&gt;&gt;     Systems programming on Linux<br>
&gt;&gt;     Algorithms<br>
&gt;&gt;<br>
&gt;&gt; Thoughts? Could we go so far as to resurrect a project like splint or<br>
&gt;&gt; something and bring it forward? Or help people transition into kernel<br>
&gt;&gt; janitors?<br>
&gt;&gt;<br>
&gt;&gt; Leam<br>
&gt;<br>
&gt; _______________________________________________<br>
&gt; Ale mailing list<br>
&gt; <a href="javascript:;" onclick="_e(event, &#39;cvml&#39;, &#39;Ale@ale.org&#39;)">Ale@ale.org</a><br>
&gt; <a href="http://mail.ale.org/mailman/listinfo/ale" target="_blank">http://mail.ale.org/mailman/listinfo/ale</a><br>
&gt; See JOBS, ANNOUNCE and SCHOOLS lists at<br>
&gt; <a href="http://mail.ale.org/mailman/listinfo" target="_blank">http://mail.ale.org/mailman/listinfo</a><br>
<br>
<br>
<br>
--<br>
Mind on a Mission<br>
_______________________________________________<br>
Ale mailing list<br>
<a href="javascript:;" onclick="_e(event, &#39;cvml&#39;, &#39;Ale@ale.org&#39;)">Ale@ale.org</a><br>
<a href="http://mail.ale.org/mailman/listinfo/ale" target="_blank">http://mail.ale.org/mailman/listinfo/ale</a><br>
See JOBS, ANNOUNCE and SCHOOLS lists at<br>
<a href="http://mail.ale.org/mailman/listinfo" target="_blank">http://mail.ale.org/mailman/listinfo</a><br>
</blockquote></div><br><br>-- <br>.!# BrunoBronosky #!.<br>